是否可以切换MongoDB的$ mod查询运算符的被除数和除数?

时间:2016-05-20 18:29:07

标签: mongodb mongodb-query aggregation-framework

MongoDB的$mod query operator提供了一种方法来选择字段的值 V 除以除数 D 的字段具有指定的余数< EM> - [R 。因此,它选择 V mod D 等于 R 的文档。

我需要切换模数和模运算的除数。换句话说,我需要选择提供的股息 D 除以字段的值 V 的文档具有指定的余数 R 。所以我需要选择 D mod V 等于 R 的文档。

是否可以切换MongoDB的$ mod查询运算符的被除数和除数?如果没有,是否可以将查询传递给自定义函数来处理这个问题?

1 个答案:

答案 0 :(得分:0)

使用.find运算符的常规$mod查询在此处无效,但您仍然可以使用聚合框架和$redact运算符以及$mod来执行此操作算术聚合运算符。

假设我们的收藏中有以下文件:

{ "_id" : ObjectId("573f624b4c01ce47a183a632"), "a" : 4 },
{ "_id" : ObjectId("573f63494c01ce47a183a634"), "a" : 12 },
{ "_id" : ObjectId("573f63504c01ce47a183a635"), "a" : 6 },
{ "_id" : ObjectId("573f63504c01ce47a183a636"), "a" : 24 }

以下查询返回60模拟字段a的值等于0的所有文档。

db.collection.aggregate([
    { "$redact": { 
        "$cond": [ 
            { "$eq": [ {"$mod": [ 60, "$a" ] }, 0 ] }, 
            "$$KEEP", 
            "$$PRUNE"
        ]
    }}
])

产生:

{ "_id" : ObjectId("573f624b4c01ce47a183a632"), "a" : 4 }
{ "_id" : ObjectId("573f63494c01ce47a183a634"), "a" : 12 }
{ "_id" : ObjectId("573f63504c01ce47a183a635"), "a" : 6 }

另一种可能效率较低的方法是使用$where运算符。

db.collection.find("60 % this.a === 0")