2012-06-26 5 views
1

Comment faire cette requête dans mongoDB?comment faire cette requête dans mongoDB?

{

_id: "*******"

contenu: "",

commentaires: [

{

key1: "1",

key2: "2"

},

{

key1: "sdfs",

key2: "sdfasdf"

}

]

}

Par exemple, j'utiliser les données ci-dessous. Je veux interroger les éléments dans les commentaires dans la condition {key1: 1, key2: 2}, et ne pas retourner l'ensemble de l'enregistrement.

Que dois-je faire?

Répondre

1

Vous pouvez interroger un sous-document sur deux champs à l'aide $elemMatch:

{ comments: { $elemMatch : { key1: 1, key2: 2 } } } 

You cannot return just the selected subdocument. Vous aurez tous. Vous devrez donc filtrer du côté client. (Vous pouvez bien sûr exclure tous les autres champs du document principal).

+1

vous voulez dire que même si j'utilise "$ elemMatch", deux sous-documents vont quand même revenir? –

+0

'$ elemMatch'! Je ne savais pas à ce sujet. Oui, ça marcherait. Mise à jour de la réponse – Thilo

+0

merci, je vais vérifier plus tard, c'est très gentil de votre part –

3

Vous pouvez essayer de celui-ci

{ "comments.key1" : "1", "comments.key2" : "sdfasdf" } 

Vous ne devez utiliser lorsque plus d'un champ doit correspondre à l'élément de tableau.

+1

Cela ne fonctionnera pas. Cela va correspondre même si un commentaire a key1, et un commentaire * différent * a key2. Vous devez utiliser $ elemMatch. – Thilo

Questions connexes