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

MongoDB $or Aggregation Pipeline Operator

I MongoDB er $or aggregeringspipeline-operator evaluerer et eller flere udtryk og returnerer true hvis nogen vurderes til sand . Ellers returnerer den false .

Syntaks

Syntaksen ser sådan ud:

{ $or:[ , , ... ] }

Eksempel

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

{ "_id" :1, "a" :10, "b" :2, "c" :20 }

Her er, hvad der sker, når vi bruger $or at teste for to forhold i forhold til dette dokument:

db.data.aggregate( [ { $match:{ _id:1 } }, { $project:{ _id:0, a:1, b:1, result:{ $or:[ { $ gt:[ "$a", 9 ] }, { $lt:[ "$b", 1 ] } ] } } } ]) 

Resultat:

{ "a" :10, "b" :2, "result" :sand }

Vi kan se den $or returnerede true , selvom et af udtrykkene løses til false . Dette er fordi det returnerer true hvis nogen af udtrykkene er sand .

Her er det igen, men med begge udtryk, der løses til false .

db.data.aggregate( [ { $match:{ _id:1 } }, { $project:{ _id:0, a:1, b:1, result:{ $or:[ { $ gt:[ "$a", 20 ] }, { $lt:[ "$b", 1 ] } ] } } } ]) 

Resultat:

{ "a" :10, "b" :2, "result" :falsk }

Mere end to argumenter

Som nævnt, $or accepterer et eller flere udtryk. Det foregående eksempel bruger to udtryk. Her er et eksempel, der bruger tre:

db.data.aggregate( [ { $match:{ _id:1 } }, { $project:{ _id:0, a:1, b:1, c:1, result:{ $or :[ { $gt:[ "$a", 9 ] }, { $lt:[ "$b", 3 ] }, { $gt:[ "$c", 30 ] } ] } } ]) 

Resultat:

{ "a" :10, "b" :2, "c" :20, "result" :sand }

I dette tilfælde er resultatet true , selvom den tredje værdi evalueres til false .

Et argument

Givet at $or accepterer et eller flere udtryk, er det muligt at give et enkelt argument.

Eksempel:

db.data.aggregate( [ { $match:{ _id:1 } }, { $project:{ _id:0, a:1, result:{ $or:[ { $gt:[ " $a", 9 ] } ] } } } ]) 

Resultat:

{ "a" :10, "result" :sand }

Nul-, Null- og Udefinerede værdier

$or operatør evaluerer 0 , null og udefineret som falsk .

Antag, at vi har følgende dokumenter:

{ "_id" :2, "a" :0, "b" :2 }{ "_id" :3, "a" :10, "b" :0 }{ "_id" :4, "a " :0, "b" :0 }{ "_id" :5, "a" :null, "b" :2 }{ "_id" :6, "a" :10, "b" :null }{ " _id" :7, "a" :null, "b" :null }{ "_id" :8, "a" :undefined, "b" :2 }{ "_id" :9, "a" :10, " b" :undefined }{ "_id" :10, "a" :undefined, "b" :udefineret }

Her er, hvad der sker, når vi anvender $or :

db.data.aggregate( [ { $match:{ _id:{ $in:[ 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } } }, { $project :{ _id:0, a:1, b:1, result:{ $or:[ "$a", "$b" ] } } } ]) 

Resultat:

{ "a" :0, "b" :2, "result" :sand }{ "a" :10, "b" :0, "result" :sand }{ "a" :0, "b " :0, "result" :falsk }{ "a" :null, "b" :2, "result" :sand }{ "a" :10, "b" :null, "result" :sand }{ " a" :null, "b" :null, "result" :false }{ "a" :undefined, "b" :2, "result" :sand }{ "a" :10, "b" :undefined, " result" :true }{ "a" :undefined, "b" :undefined, "result" :false }

Her brugte jeg blot feltet som udtryk.

Sådan ser det ud, når vi kun anvender ét argument på de felter, der indeholder 0 , null og udefineret :

db.data.aggregate( [ { $match:{ _id:{ $in:[ 4, 7, 10 ] } } }, { $project:{ _id:0, a:1, result:{ $or:[ "$a" ] } } } ]) 

Resultat:

{ "a" :0, "result" :false }{ "a" :null, "result" :false }{ "a" :undefined, "result" :false }

Alle felter returnerer falsk .

Kald $or uden argumenter

Når det påkaldes uden argumenter, vil $or operatør evaluerer til falsk .

Eksempel:

db.data.aggregate( [ { $match:{ _id:{ $in:[ 1 ] } } }, { $project:{ _id:0, result:{ $or:[ ] } } } ]) 

Resultat:

{ "result" :false }

  1. Kan jeg serialisere et ruby ​​Digest::SHA1-forekomstobjekt?

  2. Afrunding til 2 decimaler ved hjælp af MongoDB aggregeringsramme

  3. 2 måder at slette en database i MongoDB

  4. Redis filtrer efter område, sorter og returner 10 først