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 }