MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB cerca ogni dict nell'elenco nella raccolta

Sebbene sia menzionato che in effetti $and operatore non è richiesto, in nessuna delle due forme questa non è la query che desideri. Considera quanto segue:

db.user.find_one({ 'names.firstName': 'alice','names.lastName': 'jones' })

Questo infatti fa corrisponde al record dato in quanto sono presenti entrambi gli elementi con "firstName" uguale a "alice" e "lastName" valori uguali a "jones". Ma ovviamente il problema qui è semplice in quanto non esiste alcun elemento effettivo nell'array che abbia un documento secondario per entrambi questi valori.

Per far corrispondere dove un elemento dell'array contiene "entrambi" i criteri forniti, è necessario utilizzare $elemMatch operatore. Questo applica la condizione della query agli "elementi" dell'array.

db.user.find_one({ 
    'names': { '$elemMatch': { 'firstName': 'alice','lastName': 'smith' }
})

E, naturalmente, se provassi "alice" e "jones", non corrisponderebbero poiché nessun elemento contiene effettivamente quell'operazione.