Ho chiesto questo come commento alla domanda another e ho anche inviato un messaggio question su mongodb-user. Nessuna risposta finora, quindi mi sto rivolgendo a una domanda separata.Query array nidificato MongoDB
I documentation stati:
Se il campo contiene una matrice, quindi il $ in operatore seleziona il documenti il cui campo detiene un array che contiene almeno un elemento che corrisponde a un valore nella matrice specificata (ad esempio, , ecc)
sto usando:
mongod --version:
db version v2.2.2, pdfile version 4.5
Thu May 30 12:19:12 git version: d1b43b61a5308c4ad0679d34b262c5af9d664267
mongo --version:
MongoDB shell version: 2.0.4
In MongoDB shell:
db.nested.insert({'level1': {'level2': [['item00', 'item01'], ['item10', 'item11']]}})
Ecco un elenco di query che dovrebbero funzionare in base alla documentazione, ed i risultati che producono:
Perché non funziona?
> db.nested.findOne({'level1.level2.0': 'item00'})
null
Perché ho bisogno del $ tutto?
> db.nested.findOne({'level1.level2.0': {'$all': ['item00']}})
{
"_id" : ObjectId("51a7a4c0909dfd8872f52ed7"),
"level1" : {
"level2" : [
[
"item00",
"item01"
],
[
"item10",
"item11"
]
]
}
}
Almeno uno dei seguenti dovrebbe funzionare, giusto?
> db.nested.findOne({'level1.level2.0': {'$in': ['item00']}})
null
> db.nested.findOne({'level1.level2': {'$in': ['item00']}})
null
Qualche idea? Stiamo pensando di abbandonare MongoDB se la sintassi della query non funziona come pubblicizzato.
Grazie!
Apprezzo il fatto che abbiate il tempo di rispondere, ma sfortunatamente nessuna delle vostre risposte è corretta. Nella pagina "Leggi" del manuale, cercare "La seguente operazione restituisce un cursore a tutti i documenti nella raccolta di bios in cui il campo dell'array contribuisce contiene l'elemento" UNIX ":" Nel collegamento della documentazione nella parte superiore della mia domanda, puoi vedere che $ in dovrebbe funzionare su campi contenenti array. Infine, la tua affermazione "$ tutto funziona perché ..." è errata: non tutti i valori nel campo devono esistere nella query, ma tutti i valori nella query devono esistere nel campo del documento. – dgorur
Grazie per la correzione in "$ tutto funziona perché ...". Quindi stai dicendo che $ in dovrebbe funzionare per gli array e la documentazione lo dice. Ora sono incuriosito. Farò degli esperimenti e vedrò se lo scoprirò. Hai una domanda molto interessante qui! – AntonioOtero
Ho inserito le mie conclusioni in un'altra risposta, spero che ti sia utile. – AntonioOtero