sql >> Database >  >> NoSQL >> MongoDB

Kunnen $in en $or elkaar vervangen in MongoDB?

Uit hun officiële documentatie zelf of- versus-in :

Als je documenten hebt zoals hieronder:

[
  {
    "price": 100
  },
  {
    "price": 200
  },
  {
    "price": 300
  },
  {
    "price": 400
  },
  {
    "price": 500
  }
]

Als u documenten wilt ontvangen waar price is gelijk aan 100 of 500 , zoekopdracht als :

db.collection.find({ price: { $in: [ 100, 500 ] } })

Door te doen zoals hierboven, is de query eenvoudig en schoon. Je kunt ook $or . gebruiken in plaats van $in maar waarom zou u de steno-notatie verliezen en proberen uw zoekopdracht er omvangrijk uit te laten zien door steeds weer meer objecten van hetzelfde veld toe te voegen?

Standaard als je logische OR . wilt doen op twee verschillende operators zou je $or . gebruiken , Maar wanneer gebruik je $or op hetzelfde veld :

db.collection.find({ $or: [ { price: { $lt: 200 } }, { price: { $gt: 400 } } ] })

Zoals hierboven, wanneer je meerdere verschillende voorwaarden hebt om op hetzelfde veld te matchen, gebruik je het.

Deze twee zoekopdrachten leveren hetzelfde resultaat op wanneer ze worden uitgevoerd, maar wanneer u $in . gebruikt - als invoerwaarden rechte getallen zijn of tekenreeksen of andere typen kunnen zijn waarbij invoerwaarden exact overeenkomen met waarden van price veld in docs, maar wanneer u $or . gebruikt je controleert op verschillende voorwaarden op hetzelfde veld.

Test : mongoplayground




  1. MongoDB 3.6.2 2008R2 Plus wordt niet geïnstalleerd

  2. Geneste gegevens van MongoDB in een gegevensframe van Panda's krijgen

  3. 3 manieren om de rij met de minimumwaarde in SQL te selecteren

  4. Kan geen naamruimte maken in transactie met meerdere documenten (MongoDB 4.0, Spring Data 2.1.0, Spring Boot)