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

MongoDB $allElementsTrue

В MongoDB, $allElementsTrue Операторът на конвейера за агрегиране оценява масив като набор и връща true ако нито един елемент в масива не е false .

Ако масивът съдържа елемент, който е false , след това $allElementsTrue връща false .

Елементът на масива е true ако не е false , null , 0 , или undefined .

Пример

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

{ "_id" : 1, "data" : [ 1, 2, 3 ] }

Този документ съдържа масив.

Можем да изпълним следната заявка с $allElementsTrue за да разберете дали масивът съдържа или не елемент, който е false :

db.test.aggregate(
   [
     { $project: { 
        _id: 0,
        allElementsTrue: { $allElementsTrue: [ "$data" ] } } 
         }
   ]
)

Резултат:

{ "allElementsTrue" : true }

В този случай нито един от елементите на масива не е false , и така получаваме резултат от true .

Когато масивът съдържа False

Нека добавим следния документ към колекцията:

{ "_id" : 2, "data" : [ true, false ] }

И нека изпълним $allElementsTrue срещу този документ:

db.test.aggregate(
  [
    { $match: { _id: 2 } },
    { $project: { 
      _id: 0,
      allElementsTrue: { $allElementsTrue: [ "$data" ] } } 
        }
  ]
)

Резултат:

{ "allElementsTrue" : false }

Този път получаваме false , въпреки че има друг елемент, който е true . Това може да се очаква, защото $allElementsTrue връща false винаги, когато има поне един елемент, който е false , независимо колко други елемента са верни.

Празни масиви

Празните масиви връщат true .

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

{ "_id" : 3, "data" : [ ] }

Този документ съдържа празен масив.

Сега нека изпълним $allElementsTrue отново:

db.test.aggregate(
  [
    { $match: { _id: 3 } },
    { $project: { 
      _id: 0,
      allElementsTrue: { $allElementsTrue: [ "$data" ] } } 
        }
  ]
)

Резултат:

{ "allElementsTrue" : true }

Както се очаква, той връща true .

Нулеви, 0 и недефинирани стойности

Не е напълно вярно, че $allElementsTrue оценява на false само когато масивът съдържа false .

$allElementsTrue операторът също се оценява на false всеки път, когато масивът съдържа null , 0 , или undefined стойности.

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

{ "_id" : 4, "data" : [ 1, null, 3 ] }
{ "_id" : 5, "data" : [ 1, undefined, 3 ] }
{ "_id" : 6, "data" : [ 0, 1, 2 ] }

Масивът на всеки документ съдържа елемент от null , 0 , или undefined .

Сега нека изпълним $allElementsTrue срещу тези документи:

db.test.aggregate(
  [
    { $match: {_id: { $in: [4,5,6] }} },
    { $project: { 
      allElementsTrue: { $allElementsTrue: [ "$data" ] } } 
        }
  ]
)

Резултат:

{ "_id" : 4, "allElementsTrue" : false }
{ "_id" : 5, "allElementsTrue" : false }
{ "_id" : 6, "allElementsTrue" : false }

Всички документи връщат false както се очаква.

Вложени масиви

Ако масивът съдържа вложен масив, който съдържа елемент, който е false , то това не е достатъчно за $allElementsTrue да върне false . Що се отнася до $allElementsTrue е загрижен, вложеният масив е елементът и следователно не false .

За да демонстрирам какво имам предвид, да предположим, че вмъкваме следните документи:

{ "_id" : 7, "data" : [ 1, [ false ], 3 ] }
{ "_id" : 8, "data" : [ 1, [ false ], false ] }

Сега нека изпълним $allElementsTrue срещу тези два документа:

db.test.aggregate(
  [
    { $match: {_id: { $in: [7,8] }} },
    { $project: { 
      allElementsTrue: { $allElementsTrue: [ "$data" ] } } 
        }
  ]
)

Резултат:

{ "_id" : 7, "allElementsTrue" : true }
{ "_id" : 8, "allElementsTrue" : false }

Можем да видим, че първият документ върна true а вторият върна false .

Това е така, защото в първия документ false стойността е вложена в друг масив и следователно не се брои като false стойност (т.е. самият масив е стойността).

Вторият документ обаче също съдържа false като един от елементите на масива и следователно тази стойност е това, което причинява $allElementsTrue за оценка на false .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $substrCP

  2. MongoDb Aggregation:Как мога да групирам масив-1 въз основа на друг масив-2, когато са дадени масив-1 и масив-2?

  3. Функции на MongoDB в ClusterControl 1.4

  4. MongoDB сортира документи по елементи на масива

  5. Инсталация на MongoDB