2011-11-16 24 views
66

Si tengo un registro como este;mongodb buscar por varios elementos de matriz

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

¿Cómo puedo unir varias palabras en MongoDB? Cuando juego una sola palabra, puedo hacer esto;

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

Pero cuando intento esto para varias palabras, no funciona;

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

que supongo que mediante el uso de una matriz, que intenta hacer coincidir toda la matriz contra el que está en el registro no coinciden con los contenidos individuales.

Respuesta

112

depende de si usted está tratando de encontrar documentos donde words contiene ambos elementos (text y here) usando $all:

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

o ninguno de los dos (o texthere) usando $in:

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

$ todo era lo que estaba buscando, gracias. :) –

+3

Esto también me ayudó, necesitaba encontrar un ID de objeto en una matriz, y donde algo como $ in: [ObjectId ("4f9f2c336b810d0cf0000017")] falló, $ in: ["4f9f2c336b810d0cf0000017"] funcionó – jbnunn

+0

también puede encuentre otra forma de hacerlo en la página de soporte de mangodb http://docs.mongodb.org/manual/core/indexes/#indexes-on-sub-documents y http://docs.mongodb.org/manual/core/indexes/# multikey-indexes –

Cuestiones relacionadas