mongodb recherche par plusieurs éléments de tableau

96

Si j'ai un dossier comme celui-ci;

{
  "text": "text goes here",
  "words": ["text", "goes", "here"]
}

Comment puis-je faire correspondre plusieurs mots dans MongoDB? En faisant correspondre un seul mot, je peux le faire;

db.find({ words: "text" })

Mais quand j'essaye ceci pour plusieurs mots, cela ne fonctionne pas;

db.find({ words: ["text", "here"] })

Je suppose qu'en utilisant un tableau, il essaie de faire correspondre le tableau entier à celui de l'enregistrement, plutôt que de faire correspondre le contenu individuel.

Stephen Bélanger
la source

Réponses:

168

Cela dépend si vous essayez de trouver des documents wordscontenant les deux éléments ( textet here) en utilisant $all:

db.things.find({ words: { $all: ["text", "here"] }});

ou l'un d'eux ( textou here) en utilisant $in:

db.things.find({ words: { $in: ["text", "here"] }});
AbdelHady
la source
3
Cela m'a aidé aussi, j'en avais besoin pour trouver un ID d'objet dans un tableau, et où quelque chose comme $ in: [ObjectId ("4f9f2c336b810d0cf0000017")] a échoué, $ in: ["4f9f2c336b810d0cf0000017"] a fonctionné
jbnunn
vous pouvez également trouver un autre moyen de le faire sur la page de support mangodb docs.mongodb.org/manual/core/indexes/#indexes-on-sub-documents et docs.mongodb.org/manual/core/indexes/#multikey-indexes
Vivek Bajpai
1
Est-ce mieux que de boucler le tableau et d'effectuer une seule recherche ()?
Rohit Nair