Mongodb 如何比较Mongo中的数学表达式

Mongodb 如何比较Mongo中的数学表达式,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,如果我收集了一些文件,这些文件的格式如下: { "_id" : ObjectId("53202e1d78166396592cf805"), "a" : 4, "b" : 2, "c" : 4, "d" : 3 } 如何选择具有此条件的文档: db.stat.find({'a'+'b'>'c'+'d'}) 可能,使用聚合,但“macth”部分中的条件是: 对没有mapReduce和将值与零进行比较的人工方法的解决方案感兴趣($subtract:[“$ab”

如果我收集了一些文件,这些文件的格式如下:

{
    "_id" : ObjectId("53202e1d78166396592cf805"),
    "a" : 4,
    "b" : 2,
    "c" : 4,
    "d" : 3
}
如何选择具有此条件的文档:

db.stat.find({'a'+'b'>'c'+'d'})

可能,使用聚合,但“macth”部分中的条件是:


对没有mapReduce和将值与零进行比较的人工方法的解决方案感兴趣(
$subtract:[“$ab”,“$cd”]>0
)。

在$match之前还有一个步骤:

db.stat.aggregate([
{“$project”:{
“ab”:{“$add”:[“$a”,“$b”]},
“cd”:{“$add”:[“$c”,“$d”]}
}},
{“$project”:{
“匹配”:{“$gt”:[“$ab”、“$cd”]}
}},
{“$match”:{“matched”:true}
])
或者更好:

db.stat.aggregate([
{“$project”:{
“匹配”:{“$gt”:[
{“$add”:[“$a”、“$b”]},
{“$add”:[“$c”、“$d”]}
]}
}},
{“$match”:{“matched”:true}
])
查看保存原始文档的概述

当然,总有这种“不漂亮”的形式:

db.stats.find(函数(){
返回((this.a+this.b)>(this.c+this.d));
})
但这是运算符窗体的快捷方式,它将删除您使用索引进行选择的功能


因此,希望您可以使用初始$match来选择要这样测试的文档,因此聚合方式更好,因为初始$match可以使用索引。

在匹配中,您为什么不使用它来查看它是什么方式?但中小企业也是如此substraction@NeilLunn是的,你的答案是对的,不知道为什么我写了我所做的
db.stat.aggregate([
 {$project : {
      _id : '$_id',   
      'ab' : { '$add' : [ '$a', '$b' ] },
      'cd' : { '$add' : [ '$c', '$d' ] }
     }},
     {$match: {???}}
]);