mongodb encontrar por vários itens de matriz

96

Se eu tiver um registro como este;

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

Como posso combinar várias palavras dele no MongoDB? Ao combinar uma única palavra, posso fazer isso;

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

Mas quando tento fazer isso com várias palavras, não funciona;

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

Estou supondo que, ao usar uma matriz, ele tenta combinar a matriz inteira com a do registro, em vez de combinar os conteúdos individuais.

Stephen Belanger
fonte

Respostas:

168

Depende se você está tentando encontrar documentos que wordscontenham os dois elementos ( texte here) usando $all:

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

ou qualquer um deles ( textou here) usando $in:

db.things.find({ words: { $in: ["text", "here"] }});
AbdelHady
fonte
3
Isso me ajudou também, eu precisava encontrar um ID de objeto em uma matriz, e onde algo como $ in: [ObjectId ("4f9f2c336b810d0cf0000017")] falhou, $ in: ["4f9f2c336b810d0cf0000017"] funcionou
jbnunn
você também pode encontrar outra maneira de fazer isso na página de suporte do mangodb docs.mongodb.org/manual/core/indexes/#indexes-on-sub-documents e docs.mongodb.org/manual/core/indexes/#multikey-indexes
Vivek Bajpai
1
É melhor do que fazer um loop na matriz e executar find () único?
Rohit Nair