I když je zmíněno, že skutečně $and
operátor není vyžadován, v žádné podobě to není dotaz, který chcete. Zvažte následující:
db.user.find_one({ 'names.firstName': 'alice','names.lastName': 'jones' })
To ve skutečnosti dělá shodují se s daným záznamem, protože existují oba prvky s hodnotami "firstName" rovným "alice" a "lastName" rovným "jones". Ale problém je zde samozřejmě jednoduchý v tom, že v poli není žádný skutečný prvek, který by měl pro obě tyto hodnoty dílčí dokument.
Aby bylo možné porovnat, kde prvek pole obsahuje „obě“ daná kritéria, musíte použít $elemMatch
operátor. To aplikuje podmínku dotazu na "prvky" pole.
db.user.find_one({
'names': { '$elemMatch': { 'firstName': 'alice','lastName': 'smith' }
})
A samozřejmě, pokud byste zkusili "alice" a "jones", pak by to neodpovídalo, protože žádný prvek ve skutečnosti tuto operaci neobsahuje.