MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB $anyElementTrue

W MongoDB $anyElementTrue Operator potoku agregacji ocenia tablicę jako zestaw i zwraca true jeśli którykolwiek z elementów jest true .

Jeśli żaden z elementów nie jest true , to zwraca false .

Element tablicy to true jeśli to nie jest false , null , 0 lub undefined .

Przykład

Załóżmy, że mamy kolekcję z następującym dokumentem:

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

Ten dokument zawiera tablicę.

Możemy uruchomić następujące zapytanie za pomocą $anyElementTrue aby dowiedzieć się, czy tablica zawiera elementy, których wynikiem jest true :

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

Wynik:

{ "anyElementTrue" : true }

W tym przypadku wszystkie elementy tablicy mają wartość true (tzn. nie są false , null , 0 lub undefined ), a więc otrzymujemy wynik true .

Kiedy żaden element nie jest prawdziwy

Dodajmy do kolekcji następujący dokument:

{ "_id" : 2, "data" : [ false, undefined, 0, null ] }

I uruchommy $anyElementTrue w stosunku do tego dokumentu:

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

Wynik:

{ "anyElementTrue" : false }

Jak widać tutaj, $anyElementTrue ocenia jako false gdy tablica zawiera false , null , 0 lub undefined wartości.

Kiedy tablica zawiera zarówno prawdę, jak i fałsz

Dodajmy do kolekcji następujący dokument:

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

I uruchommy $anyElementTrue w stosunku do tego dokumentu:

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

Wynik:

{ "anyElementTrue" : true }

Otrzymujemy true , mimo że istnieje inny element, który jest false . Należy się tego spodziewać, ponieważ $anyElementTrue zwraca true gdy istnieje co najmniej jeden element, który jest true , niezależnie od tego, ile innych elementów jest fałszywych.

Puste tablice

Puste tablice zwracają true .

Załóżmy, że do naszej kolekcji dodamy następujący dokument:

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

Ten dokument zawiera pustą tablicę.

Teraz uruchommy $anyElementTrue ponownie:

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

Wynik:

{ "anyElementTrue" : false }

Zwraca false , ponieważ pusta tablica nie jest false .

Zagnieżdżone tablice

$anyElementTrue operator nie zejść do dowolnych zagnieżdżonych tablic. Ocenia tablicę na najwyższym poziomie.

W związku z tym, czy zagnieżdżona tablica zawiera elementy, które są true lub false nie ma znaczenia dla $anyElementTrue . O ile $anyElementTrue dotyczy, zagnieżdżona tablica jest elementem, a zatem true .

Aby pokazać, o co mi chodzi, załóżmy, że wstawiamy następujące dokumenty:

{ "_id" : 5, "data" : [ false, [ false ] ] }
{ "_id" : 6, "data" : [ false, false ] }

Teraz uruchommy $anyElementTrue przeciwko tym dwóm dokumentom:

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

Wynik:

{ "_id" : 5, "anyElementTrue" : true }
{ "_id" : 6, "anyElementTrue" : false }

Widzimy, że pierwszy dokument zwrócił true a drugi zwrócił false .

Dzieje się tak, ponieważ tablica w pierwszym dokumencie zawiera zagnieżdżoną tablicę, która wystarcza do zwrócenia true , niezależnie od jej zawartości.

Drugi dokument nie zawiera zagnieżdżonej tablicy – ​​zawiera tylko dwa false wartości – i dlatego otrzymuje wynik false .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. C# mongodb - jak zaktualizować zagnieżdżone elementy tablicy

  2. MongoDB Specyfikatory formatu $dateToString

  3. Jak mogę używać MongoDB z Flask?

  4. Mongoose Mongodb wysyła zapytanie do tablicy obiektów

  5. pobieranie atrybutów schematu z modelu Mongoose