V MongoDB můžete použít $exists operátor dotazu na elementy, aby odpovídal dokumentům, které obsahují konkrétní pole.
Můžete jej také použít ke spárování dokumentů, které neobsahují konkrétní pole.
Můžete jej také použít ve spojení s jinými operátory, jako je $nin přiřadit dokumenty, kde dané pole existuje, ale neobsahuje konkrétní hodnotu.
Příklad
Předpokládejme, že máme sbírku nazvanou cats který obsahuje následující dokumenty:
{ "_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") }
Tyto dokumenty jsou mírně nekonzistentní s ohledem na pole, která mají. Některé mají weight pole, ostatní mají height pole, někteří mají born pole atd.
Můžeme použít $exists operátor vrátit dokumenty z této kolekce, které mají specifické pole.
Příklad:
db.cats.find( { weight: { $exists: true } } ) Výsledek:
{ "_id" : 2, "name" : "Meow", "weight" : 30 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 5, "name" : null, "weight" : 20 }
Vidíme, že pouze ty dokumenty, které obsahují weight pole jsou vráceny.
Pole, která obsahují null
$exists operátor zahrnuje pole obsahující null . Nerozlišuje mezi null a non-null hodnoty.
Příklad:
db.cats.find( { name: { $exists: true } } ) Výsledek:
{ "_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 }
Vidíme, že dokument 5 byl vrácen, i když jeho name pole je null .
Existuje bez konkrétní hodnoty
Můžete kombinovat $exists s jinými operátory vrátit dokumenty, které obsahují pole, ale toto pole neobsahuje konkrétní hodnotu.
Příklad:
db.cats.find( { weight: { $exists: true, $nin: [20,30] } } ) Výsledek:
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
Toto je jiný výsledek, než jaký bychom viděli, kdybychom jednoduše použili $nin bez $exists operátor.
Takto by to vypadalo:
db.cats.find( { weight: { $nin: [20,30] } } ) Výsledek:
{ "_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") } Dokumenty, které neobsahují konkrétní pole
Můžete použít $exists: false vrátit dokumenty, které není obsahovat zadané pole.
Příklad:
db.cats.find( { name: { $exists: false } } ) Výsledek:
{ "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }
V tomto případě jeden dokument v kolekci neobsahuje name pole.
Zkontrolujte více polí
Existenci více polí můžete zkontrolovat tak, že je oddělíte čárkou.
Příklad:
db.cats.find( {
name: { $exists: true },
height: { $exists: true }
} ) Výsledek:
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
Tento příklad vrátí všechny dokumenty, které obsahují name pole a height pole.