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.

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

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


1
É melhor do que fazer um loop na matriz e executar find () único?
Rohit Nair
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.