sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB $allElementsTrue

I MongoDB er $allElementsTrue aggregeringspipeline-operatør evaluerer et array som et sæt og returnerer true hvis intet element i arrayet er false .

Hvis arrayet indeholder et element, der er false , derefter $allElementsTrue returnerer false .

Et arrays element er true hvis det ikke er false , null , 0 eller undefined .

Eksempel

Antag, at vi har en samling med følgende dokument:

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

Dette dokument indeholder et array.

Vi kan køre følgende forespørgsel med $allElementsTrue for at finde ud af, om arrayet indeholder et element, der er false :

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

Resultat:

{ "allElementsTrue" : true }

I dette tilfælde er ingen af ​​array-elementerne false , og så får vi et resultat af true .

Når arrayet indeholder falsk

Lad os tilføje følgende dokument til samlingen:

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

Og lad os køre $allElementsTrue mod dette dokument:

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

Resultat:

{ "allElementsTrue" : false }

Denne gang får vi false , selvom der er et andet element, der er true . Dette kan forventes, fordi $allElementsTrue returnerer false når der er mindst ét ​​element, der er false , uanset hvor mange andre elementer der er sande.

Tomme arrays

Tomme arrays returnerer true .

Antag, at vi tilføjer følgende dokument til vores samling:

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

Dette dokument indeholder et tomt array.

Lad os nu køre $allElementsTrue igen:

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

Resultat:

{ "allElementsTrue" : true }

Som forventet returnerer den true .

Nul-, 0- og udefinerede værdier

Det er ikke helt rigtigt, at $allElementsTrue evalueres til false kun når arrayet indeholder false .

$allElementsTrue operatør evaluerer også til false hver gang et array indeholder null , 0 eller undefined værdier.

Antag, at vi føjer følgende dokumenter til vores samling:

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

Hvert dokuments array indeholder et element af enten null , 0 eller undefined .

Lad os nu køre $allElementsTrue mod disse dokumenter:

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

Resultat:

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

Alle dokumenter returnerer false som forventet.

Indlejrede arrays

Hvis arrayet indeholder et indlejret array, der indeholder et element, der er false , så er det ikke nok til $allElementsTrue for at returnere false . Så vidt $allElementsTrue er det indlejrede array elementet og derfor ikke false .

For at demonstrere, hvad jeg mener, antag, at vi indsætter følgende dokumenter:

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

Lad os nu køre $allElementsTrue mod disse to dokumenter:

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

Resultat:

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

Vi kan se, at det første dokument returnerede true og den anden returnerede false .

Dette er fordi, i det første dokument, false værdi er indlejret i et andet array og tæller derfor ikke som en false værdi (dvs. selve arrayet er værdien).

Det andet dokument indeholder imidlertid også false som et af array-elementerne, og derfor er denne værdi det, der forårsager $allElementsTrue for at evaluere til false .


  1. gemme ip-intervaller i Redis

  2. MongoDB erhverver mLab  –  Hvad er de forskellige MongoDB-hostingalternativer?

  3. Hvordan kan jeg gennemse eller forespørge om live MongoDB-data?

  4. Skriv igen til .ssh/authorized_keys