我的Collection 中有这样的文档 struct :
{
"grades": [
{ "grade": "A", "score": 8 },
{"grade": "A", "score": 7 }
]
}
我需要过滤这些文档,当它们的score
除以7时,它有0作为提醒.原问题here(问题30).他们的解决方案很简单:
db.restaurants.find(
{"grades.score" :
{$mod : [7,0]}
},
{"restaurant_id" : 1,"name":1,"grades":1}
);
然而,为了实践,我想自己解决,这并不工作.
db.restaurants.aggregate([
{
"$match": {
"$expr": {"$in": [0, [ { $mod: [ "$grades.score", 7 ] } ] ]}
}
},
])
错误是:
PlanExecutor error during aggregation :: caused by :: $mod only supports numeric types, not array and int
基本上,我想判断0是否在定制数组中,该数组在模运算后只包含单个值,如docs for $in在聚合中所解释的.
有没有一种方法可以使$mod
个工作作为聚合的一部分?
我看到类似的问题被问了here个,但它只是指第一个分数在等级数组,而不是所有.因此,在我的例子中,我应该看到一开始给出的示例文档,因为7 % 7 = 0