mongodb trova per più elementi dell'array


96

Se ho un record come questo;

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

Come posso abbinare più parole da esso in MongoDB? Quando si abbina una singola parola posso farlo;

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

Ma quando provo questo per più parole, non funziona;

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

Immagino che utilizzando un array, cerchi di abbinare l'intero array a quello del record, piuttosto che abbinare i singoli contenuti.

Risposte:


168

Dipende dal fatto che tu stia cercando di trovare documenti in cui wordscontiene entrambi gli elementi ( texte here) utilizzando $all:

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

o uno di loro ( texto here) utilizzando $in:

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

3
Anche questo mi ha aiutato, ne avevo bisogno per trovare un ID oggetto in un array e dove qualcosa come $ in: [ObjectId ("4f9f2c336b810d0cf0000017")] non è riuscito, $ in: ["4f9f2c336b810d0cf0000017"] ha funzionato
jbnunn

puoi anche trovare un altro modo per farlo nella pagina di supporto di mangodb docs.mongodb.org/manual/core/indexes/#indexes-on-sub-documents e docs.mongodb.org/manual/core/indexes/#multikey-indexes
Vivek Bajpai

1
È meglio che eseguire il loop dell'array ed eseguire single find ()?
Rohit Nair,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.