sql >> Database >  >> NoSQL >> MongoDB

Specificeer meerdere criteria voor matrixelementen

Om te begrijpen wat de documentatie zegt, moet je eerst begrijpen hoe bereikquery's met array werken.

Stel dat u het volgende document in uw verzameling heeft:

{ "finished" : [ 27, 3 ] },
{ "finished" : 17 }

De eerste vraag:

db.users.find( { "finished": { "$elemMatch": { "$gt": 15, "$lt": 20 } } } )

Retourneert alleen het document waar "voltooid" een array is. Dit komt omdat $elemMatch operator komt alleen overeen met documenten waarbij het veld een array is en waarbij een enkel element aan alle zoekcriteria voldoet.

Maar de tweede vraag:

db.users.find( { "finished": { "$gt": 15, "$lt": 20 } } )

zal beide documenten retourneren, wat waarschijnlijk niet is wat je wilt als 27 is groter dan 20 en 3 is kleiner dan 15 . Dit komt omdat 27 komt overeen met de eerste criteria en 3 de seconde. Dit gedrag wordt vermeld in de documentatie.

...een element kan voldoen aan de voorwaarde van meer dan 15 en een ander element kan voldoen aan de voorwaarde van minder dan 20, of een enkel element kan aan beide voldoen:

Conclusie:

Bereikquery's tegen arrays komen overeen voor zover een of meerdere elementen in de array overeenkomen met alle zoekcriteria.

Les:

Gebruik geen bereikquery met matrices. U krijgt een onverwacht resultaat.



  1. MongoDB $arrayToObject

  2. MongoDB $week

  3. Hoe krijg ik alle sleutels in Redis

  4. Trage paginering over tonnen records in mongodb