Một .find
thông thường
truy vấn với $mod
toán tử sẽ không hoạt động ở đây, nhưng bạn vẫn có thể thực hiện việc này bằng cách sử dụng khung tổng hợp và $redact
toán tử và $mod
toán tử tổng hợp số học.
Giả sử chúng ta có các tài liệu sau trong bộ sưu tập của mình:
{ "_id" : ObjectId("573f624b4c01ce47a183a632"), "a" : 4 },
{ "_id" : ObjectId("573f63494c01ce47a183a634"), "a" : 12 },
{ "_id" : ObjectId("573f63504c01ce47a183a635"), "a" : 6 },
{ "_id" : ObjectId("573f63504c01ce47a183a636"), "a" : 24 }
Truy vấn sau trả về tất cả các tài liệu đó trong đó 60
modulo giá trị của trường a
bằng 0
.
db.collection.aggregate([
{ "$redact": {
"$cond": [
{ "$eq": [ {"$mod": [ 60, "$a" ] }, 0 ] },
"$$KEEP",
"$$PRUNE"
]
}}
])
nơi sản xuất:
{ "_id" : ObjectId("573f624b4c01ce47a183a632"), "a" : 4 }
{ "_id" : ObjectId("573f63494c01ce47a183a634"), "a" : 12 }
{ "_id" : ObjectId("573f63504c01ce47a183a635"), "a" : 6 }
Một cách khác có lẽ kém hiệu quả hơn để làm điều đó, là sử dụng $where
nhà điều hành.
db.collection.find("60 % this.a === 0")