sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB $existuje

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.


  1. Jak správně zvládnout migraci schématu mongoose?

  2. Jak funguje unhideIndex() v MongoDB

  3. RedisClient LUA API

  4. Vložte hodnotu na konkrétní pozici v poli v MongoDB