MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Können sich $in und $or in MongoDB gegenseitig ersetzen?

Aus ihrer offiziellen Dokumentation selbst oder- versus-in :

Wenn Sie Dokumente wie unten haben:

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

Wenn Sie Dokumente erhalten möchten, wo price ist gleich 100 oder 500 , Abfrage wie :

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

Wenn Sie wie oben vorgehen, ist die Abfrage einfach und sauber. Sie können auch $or verwenden statt $in aber warum sollten Sie die Kurzschreibweise verlieren und versuchen, Ihre Abfrage sperrig aussehen zu lassen, indem Sie immer wieder weitere Objekte desselben Felds hinzufügen?

Standardmäßig, wenn Sie logisches OR ausführen möchten Bei zwei verschiedenen Operatoren würden Sie $or verwenden , Aber wenn man $or verwendet auf demselben Feld :

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

Wie oben, wenn Sie mehrere verschiedene Bedingungen für dasselbe Feld haben, verwenden Sie es.

Diese beiden Abfragen liefern dasselbe Ergebnis, wenn sie ausgeführt werden, aber wenn Sie $in verwenden - ob Eingabewerte gerade Zahlen sind oder Zeichenfolgen oder andere Typen sein können, bei denen Eingabewerte genau mit Werten von price übereinstimmen Feld in Dokumenten, aber wenn Sie $or verwenden Sie suchen nach unterschiedlichen Bedingungen für dasselbe Feld.

Test : mongoplayground