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

MongoDB $ifNull

В MongoDB, $ifNull е оператор на конвейер за агрегиране, който ви позволява да зададете стойност, която да използвате вместо null .

Начинът, по който работи, е, че предоставяте израз и заместващ израз. Ако изразът се оценява на стойност, различна от нула, този израз се връща. Но ако изразът се оценява на нулева стойност, $ifNull връща стойността на заместващия израз.

Нулевата стойност включва екземпляри на недефинирани стойности или липсващи полета.

Пример

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

{ "_id" : 1, "data" : 250 }
{ "_id" : 2, "data" : -250 }
{ "_id" : 3, "data" : "Bucket" }
{ "_id" : 4, "data" : 0 }
{ "_id" : 5, "data" : ISODate("2021-01-03T23:30:15.100Z") }
{ "_id" : 6, "data" : null }
{ "_id" : 7, "data" : Infinity }
{ "_id" : 8, "data" : -Infinity }

Ето какво се случва, ако използваме $ifNull оператор на data поле:

db.test.aggregate(
   [
     {
       $project:
          {
            result: { $ifNull: [ "$data", "Value not provided" ] }
          }
     }
   ]
)

Резултат:

{ "_id" : 1, "result" : 250 }
{ "_id" : 2, "result" : -250 }
{ "_id" : 3, "result" : "Bucket" }
{ "_id" : 4, "result" : 0 }
{ "_id" : 5, "result" : ISODate("2021-01-03T23:30:15.100Z") }
{ "_id" : 6, "result" : "Value not provided" }
{ "_id" : 7, "result" : Infinity }
{ "_id" : 8, "result" : -Infinity }

Можем да видим, че само едно поле имаше нулева стойност и следователно то беше единственото, което върна "Value not provided" .

Недефинирани и липсващи полета

Както споменахме, недефинираните стойности и липсващите полета се третират като нулеви стойности.

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

{ "_id" : 9, "data" : undefined }
{ "_id" : 10, "name" : "Homer" }

В този случай документ 9 има undefined в полето за данни, но документ 10 дори няма data поле.

Ето какво се случва, когато приложим $ifNull към тези документи:

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 9, 10 ] } } },
     {
       $project:
          {
            result: { $ifNull: [ "$data", "Value not provided" ] }
          }
     }
   ]
)

Резултат:

{ "_id" : 9, "result" : "Value not provided" }
{ "_id" : 10, "result" : "Value not provided" }

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $gte Оператор на конвейер за агрегиране

  2. Внедряване на MongoDB във виртуален частен облак на Amazon (VPC)

  3. Последователно итериране на курсора mongodb (изчакване на обратни извиквания, преди да преминете към следващия документ)

  4. Mongodb Присъединете се към полето _id от String към ObjectId

  5. Актуализация на колекцията от метеори с традиционен идентификатор