sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $finns

I MongoDB kan du använda $exists elementfrågeoperator för att matcha dokument som innehåller ett specifikt fält.

Du kan också använda den för att matcha dokument som inte innehåller ett specifikt fält.

Du kan också använda den tillsammans med andra operatorer som $nin för att matcha dokument där ett givet fält finns, men det inte innehåller ett specifikt värde.

Exempel

Anta att vi har en samling som heter cats som innehåller följande dokument:

{ "_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") }

Dessa dokument är något inkonsekventa med avseende på de fält som de har. Vissa har en weight fält, andra har en height fält, vissa har en born fält, etc

Vi kan använda $exists operatör för att returnera dokument från den samlingen som har ett specifikt fält.

Exempel:

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

Resultat:

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

Vi kan se att endast de dokument som innehåller en weight fältet returneras.

Fält som innehåller null

$exists operatorn inkluderar fält som innehåller null . Den skiljer inte mellan null och icke-null värden.

Exempel:

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

Resultat:

{ "_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 }

Vi kan se att dokument 5 returnerades, även om dess name fältet är null .

Finns utan ett specifikt värde

Du kan kombinera $exists med andra operatörer för att returnera dokument som innehåller fältet, men det fältet innehåller inte ett specifikt värde.

Exempel:

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

Resultat:

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

Detta är ett annat resultat än det vi skulle ha sett om vi helt enkelt hade använt $nin utan $exists operatör.

Så här skulle det ha sett ut:

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

Resultat:

{ "_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") }

Dokument som inte innehåller ett specifikt fält

Du kan använda $exists: false för att returnera dokument som inte gör det innehålla det angivna fältet.

Exempel:

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

Resultat:

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

I det här fallet innehåller ett dokument i samlingen inte name fältet.

Se efter flera fält

Du kan kontrollera att det finns flera fält genom att separera dem med ett kommatecken.

Exempel:

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

Resultat:

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

Detta exempel returnerar alla dokument som innehåller både ett name fält och en height fältet.


  1. Hur skapar man en DB för MongoDB-behållare vid uppstart?

  2. Fråga en array av arrayer i MongoDB

  3. mangust rekursivt befolka

  4. Mongo DB hitta efter fältnamn med valfritt värde