Een gewone .find
vraag met de $mod
operator werkt hier niet, maar u kunt dit toch doen met behulp van het aggregatieraamwerk en de $redact
operator en de $mod
rekenkundige aggregatie-operator.
Stel dat we de volgende documenten in onze collectie hebben:
{ "_id" : ObjectId("573f624b4c01ce47a183a632"), "a" : 4 },
{ "_id" : ObjectId("573f63494c01ce47a183a634"), "a" : 12 },
{ "_id" : ObjectId("573f63504c01ce47a183a635"), "a" : 6 },
{ "_id" : ObjectId("573f63504c01ce47a183a636"), "a" : 24 }
De volgende query retourneert al die documenten waar 60
modulo de waarde van het veld a
is gelijk aan 0
.
db.collection.aggregate([
{ "$redact": {
"$cond": [
{ "$eq": [ {"$mod": [ 60, "$a" ] }, 0 ] },
"$$KEEP",
"$$PRUNE"
]
}}
])
die produceert:
{ "_id" : ObjectId("573f624b4c01ce47a183a632"), "a" : 4 }
{ "_id" : ObjectId("573f63494c01ce47a183a634"), "a" : 12 }
{ "_id" : ObjectId("573f63504c01ce47a183a635"), "a" : 6 }
Een andere waarschijnlijk minder efficiënte manier om dit te doen, is om de $where
telefoniste.
db.collection.find("60 % this.a === 0")