sql >> Databáze >  >> NoSQL >> MongoDB

Mohou se $in a $nebo vzájemně nahradit v MongoDB?

Ze samotné oficiální dokumentace nebo- versus-in :

Pokud máte dokumenty jako níže:

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

Pokud jste chtěli získat dokumenty, kde price se rovná 100 nebo 500 , dotaz jako:

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

Tím, jak je uvedeno výše, je dotaz jednoduchý a čistý. Můžete také použít $or místo $in ale proč byste ztratili zkratkový zápis a snažili se, aby váš dotaz vypadal objemně tím, že budete znovu a znovu přidávat další objekty stejného pole?

Ve výchozím nastavení, pokud jste chtěli provést logické OR na dvou různých operátorech byste použili $or , Ale kdy použít $or na stejném poli:

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

Stejně jako výše, pokud máte více různých podmínek pro shodu ve stejném poli, použijete je.

Tyto dva dotazy dávají stejný výsledek, když jsou spuštěny, ale když použijete $in - pokud jsou vstupní hodnoty rovná čísla nebo mohou být řetězce nebo jiné typy, kde vstupní hodnoty budou přesně odpovídat hodnotám price pole v dokumentech, ale když použijete $or kontrolujete různé podmínky ve stejném poli.

Test: mongoplayground




  1. Django Celery nemůže dotazovat postgres db uvnitř úlohy

  2. Importujte data do MongoDB ze souboru JSON pomocí Java

  3. Mongodb:vrátí odpovídající filtry při použití $nebo v find()

  4. MongoDb Spring najít ve vnořeném objektu