sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB $ eksisterer

I MongoDB kan du bruge $exists elementforespørgselsoperator for at matche dokumenter, der indeholder et specifikt felt.

Du kan også bruge det til at matche dokumenter, der ikke indeholder et specifikt felt.

Du kan også bruge det sammen med andre operatører såsom $nin at matche dokumenter, hvor et givet felt findes, men det ikke indeholder en bestemt værdi.

Eksempel

Antag, at vi har en samling kaldet cats der indeholder følgende dokumenter:

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

Disse dokumenter er lidt inkonsistente med hensyn til de felter, de har. Nogle har en weight felt, andre har en height felt, nogle har en born felt osv.

Vi kan bruge $exists operatør for at returnere dokumenter fra den pågældende samling, som har et specifikt felt.

Eksempel:

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, at kun de dokumenter, der indeholder en weight felt returneres.

Felter, der indeholder null

$exists operatoren inkluderer felter, der indeholder null . Den skelner ikke mellem null og ikke-null værdier.

Eksempel:

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, at dokument 5 blev returneret, selvom dets name feltet er null .

Eksisterer uden en specifik værdi

Du kan kombinere $exists med andre operatører for at returnere dokumenter, der indeholder feltet, men det felt indeholder ikke en bestemt værdi.

Eksempel:

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

Resultat:

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

Dette er et andet resultat end det, vi ville have set, hvis vi blot havde brugt $nin uden $exists operatør.

Sådan ville det have set ud:

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

Dokumenter, der ikke indeholder et specifikt felt

Du kan bruge $exists: false at returnere dokumenter, der ikke indeholde det angivne felt.

Eksempel:

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

Resultat:

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

I dette tilfælde indeholder et dokument i samlingen ikke name felt.

Se efter flere felter

Du kan kontrollere, om der findes flere felter ved at adskille dem med et komma.

Eksempel:

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

Resultat:

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

Dette eksempel returnerer alle dokumenter, der både indeholder et name felt og en height felt.


  1. MongoDB-ydelse med voksende datastruktur

  2. Hvordan indstiller jeg en timeout på en Mongoose-forespørgsel?

  3. Strengfeltværdilængde i mongoDB

  4. MongoDB $radiansToDegrees