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

MongoDB $existiert

In MongoDB können Sie den $exists verwenden -Element-Abfrageoperator, um Dokumente abzugleichen, die ein bestimmtes Feld enthalten.

Sie können es auch verwenden, um Dokumente abzugleichen, die kein bestimmtes Feld enthalten.

Sie können es auch in Verbindung mit anderen Operatoren wie $nin verwenden zum Abgleichen von Dokumenten, in denen ein bestimmtes Feld vorhanden ist, aber keinen bestimmten Wert enthält.

Beispiel

Angenommen, wir haben eine Sammlung namens cats die folgende Dokumente enthält:

{ "_id" : 1, "name" : "Scratch", "born" : "March, 2020" }
{ "_id" : 2, "name" : "Meow", "weight" : 30 }
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 5, "name" : null, "weight" : 20 }
{ "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }

Diese Dokumente sind in Bezug auf die Felder, die sie haben, leicht inkonsistent. Einige haben ein weight Feld, andere haben eine height Feld, manche haben einen born Feld usw.

Wir können den $exists verwenden Operator, um Dokumente aus dieser Sammlung zurückzugeben, die ein bestimmtes Feld haben.

Beispiel:

db.cats.find( { weight: { $exists: true } } )

Ergebnis:

{ "_id" : 2, "name" : "Meow", "weight" : 30 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 5, "name" : null, "weight" : 20 }

Wir können sehen, dass nur die Dokumente ein weight enthalten Feld zurückgegeben.

Felder, die null enthalten

Der $exists Der Operator schließt Felder ein, die null enthalten . Es unterscheidet nicht zwischen null und nicht-null Werte.

Beispiel:

db.cats.find( { name: { $exists: true } } )

Ergebnis:

{ "_id" : 1, "name" : "Scratch", "born" : "March, 2020" }
{ "_id" : 2, "name" : "Meow", "weight" : 30 }
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 5, "name" : null, "weight" : 20 }

Wir können sehen, dass Dokument 5 zurückgegeben wurde, obwohl sein name Feld ist null .

Existiert ohne einen bestimmten Wert

Sie können $exists kombinieren mit anderen Operatoren, um Dokumente zurückzugeben, die das Feld enthalten, aber dieses Feld enthält keinen bestimmten Wert.

Beispiel:

db.cats.find( { weight: { $exists: true, $nin: [20,30] } } )

Ergebnis:

{ "_id" : 4, "name" : "Sox", "weight" : 40 }

Dies ist ein anderes Ergebnis als das, das wir gesehen hätten, wenn wir einfach $nin verwendet hätten ohne $exists Betreiber.

So hätte das ausgesehen:

db.cats.find( { weight: { $nin: [20,30] } } )

Ergebnis:

{ "_id" : 1, "name" : "Scratch", "born" : "March, 2020" }
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }

Dokumente, die kein bestimmtes Feld enthalten

Sie können $exists: false verwenden um Dokumente zurückzugeben, die nicht das angegebene Feld enthalten.

Beispiel:

db.cats.find( { name: { $exists: false } } )

Ergebnis:

{ "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }

In diesem Fall enthält ein Dokument in der Sammlung den name nicht Feld.

Auf mehrere Felder prüfen

Sie können prüfen, ob mehrere Felder vorhanden sind, indem Sie sie durch ein Komma trennen.

Beispiel:

db.cats.find( { 
  name: { $exists: true }, 
  height: { $exists: true } 
} )

Ergebnis:

{ "_id" : 3, "name" : "Fluffy", "height" : 15 }

Dieses Beispiel gibt alle Dokumente zurück, die sowohl einen name enthalten Feld und eine height Feld.