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.

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"] }});

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


1
Est-ce mieux que de boucler le tableau et d'effectuer une seule recherche ()?
Rohit Nair
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.