MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB $ съществува

В MongoDB можете да използвате $exists оператор на заявка за елемент, за да съвпадне документи, които съдържат конкретно поле.

Можете също да го използвате, за да съпоставите документи, които не съдържат конкретно поле.

Можете също да го използвате във връзка с други оператори като $nin за да съответства на документи, където съществува дадено поле, но то не съдържа конкретна стойност.

Пример

Да предположим, че имаме колекция, наречена cats който съдържа следните документи:

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

Тези документи са леко непоследователни по отношение на полетата, които имат. Някои имат weight поле, други имат height поле, някои имат born поле и др.

Можем да използваме $exists оператор, за да върне документи от тази колекция, които имат конкретно поле.

Пример:

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

Резултат:

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

Можем да видим, че само тези документи, които съдържат weight поле се връщат.

Полета, които съдържат null

$exists операторът включва полета, които съдържат null . Той не прави разлика между null и не-null стойности.

Пример:

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

Резултат:

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

Можем да видим, че документ 5 е върнат, въпреки че е name полето е null .

Съществува без конкретна стойност

Можете да комбинирате $exists с други оператори, за да върне документи, които съдържат полето, но това поле не съдържа конкретна стойност.

Пример:

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

Резултат:

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

Това е различен резултат от този, който щяхме да видим, ако просто използвахме $nin без $exists оператор.

Ето как би изглеждало това:

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

Резултат:

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

Документи, които не съдържат конкретно поле

Можете да използвате $exists: false за връщане на документи, които не съдържат посоченото поле.

Пример:

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

Резултат:

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

В този случай един документ в колекцията не съдържа name поле.

Проверка за множество полета

Можете да проверите за съществуването на множество полета, като ги разделите със запетая.

Пример:

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

Резултат:

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

Този пример връща всички документи, които съдържат и двете name поле и height поле.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да конвертирам свойство в MongoDB от текст към тип дата?

  2. Урок за MongoDB:Свързване с MongoDB в Scala

  3. MongoDB:как да намерите 10 произволни документа в колекция от 100?

  4. Какво е новото в MongoDB 4.2

  5. Как да попълним поддокумент в mongoose след създаването му?