Come eseguire questa query in MongoDB?
Domanda
Il mio doc ha un campo di matrice Chiavi
Keys1 e Keys2 sono due array
Voglio che tutti i documenti in cui Chiavi contiene qualsiasi valore in Keys1 e qualsiasi valore in Keys2
Soluzione
Non c'è ottimo modo di rappresentare questa query ancora (come del punto 1.1.2) - se si chiede sulla lista o presentare una richiesta di funzionalità che possiamo cercare di ottenere qualcosa di cucinato
.Per ora il migliore è probabilmente quello di utilizzare un $ nella query di fare metà del lavoro:
db.test.find({keys: {$in: Keys1}})
Si può fare questo in combinazione con un $ dove che può fare la parte Keys2 (ma non si avvarranno di un indice - è per questo che è bene fare il più possibile con la sintassi di query regolare). Questo sarebbe simile a questa:
db.test.find({keys: {$in: Keys1}, $where: "for (i in this.keys) { for (j in Keys2) { if (this.keys[i] == Keys2[j]) return true;}} return false;"})
In tutte le versioni di MongoDB 2.6+ si può fare questo da $ e operatore.
db.test.find({$and:[{keys: {$in: Keys1}},{keys: {$in: Keys2}}]})