mongodb buscar por varios elementos de matriz

96

Si tengo un registro como este;

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

¿Cómo puedo hacer coincidir varias palabras en MongoDB? Al hacer coincidir una sola palabra puedo hacer esto;

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

Pero cuando intento esto con varias palabras, no funciona;

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

Supongo que al usar una matriz, intenta hacer coincidir toda la matriz con la del registro, en lugar de hacer coincidir los contenidos individuales.

Stephen Belanger
fuente

Respuestas:

168

Depende de si está tratando de encontrar documentos que wordscontengan ambos elementos ( texty here) usando $all:

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

o cualquiera de ellos ( texto here) usando $in:

db.things.find({ words: { $in: ["text", "here"] }});
AbdelHady
fuente
3
Esto también me ayudó, lo necesitaba para encontrar un ID de objeto en una matriz, y donde algo como $ in: [ObjectId ("4f9f2c336b810d0cf0000017")] falló, $ in: ["4f9f2c336b810d0cf0000017"] funcionó
jbnunn
también puede encontrar otra forma de hacer esto en la página de soporte de mangodb docs.mongodb.org/manual/core/indexes/#indexes-on-sub-documents y docs.mongodb.org/manual/core/indexes/#multikey-indexes
Vivek Bajpai
1
¿Es esto mejor que hacer un bucle en la matriz y realizar una búsqueda única ()?
Rohit Nair