En vanlig .find
fråga med $mod
operatör kommer inte att fungera här, men du kan ändå göra detta med hjälp av aggregeringsramverket och $redact
operatorn och $mod
aritmetisk aggregeringsoperator.
Anta att vi har följande dokument i vår samling:
{ "_id" : ObjectId("573f624b4c01ce47a183a632"), "a" : 4 },
{ "_id" : ObjectId("573f63494c01ce47a183a634"), "a" : 12 },
{ "_id" : ObjectId("573f63504c01ce47a183a635"), "a" : 6 },
{ "_id" : ObjectId("573f63504c01ce47a183a636"), "a" : 24 }
Följande fråga returnerar alla de dokument där 60
modulo värdet för fältet a
är lika med 0
.
db.collection.aggregate([
{ "$redact": {
"$cond": [
{ "$eq": [ {"$mod": [ 60, "$a" ] }, 0 ] },
"$$KEEP",
"$$PRUNE"
]
}}
])
som producerar:
{ "_id" : ObjectId("573f624b4c01ce47a183a632"), "a" : 4 }
{ "_id" : ObjectId("573f63494c01ce47a183a634"), "a" : 12 }
{ "_id" : ObjectId("573f63504c01ce47a183a635"), "a" : 6 }
Ett annat förmodligen mindre effektivt sätt att göra det är att använda $where
operatör.
db.collection.find("60 % this.a === 0")