我希望获得符合此条件的 MongoDB 集合的记录:
fieldA> fieldB + someNaturalValue 。
这是我到目前为止所做的:
db.getCollection('collection').find({
$where: function() {
return this.fieldA > this.fieldB + 10000}
});
// or
db.getCollection('collection').aggregate([
{ "$project" : {
"sum" : {"$add" : ["$fieldB", 10000]}
}
},
{ "$match" : {
"sum" : {"$lte" : "$fieldA"}
}
}
]);
我在这里面临的问题是我需要在其中一个字段中添加条件的额外值。
那些不起作用,没有考虑到这个价值。
我缺少什么?我感谢任何帮助。
db.collection.insert({fieldA : 21000, fieldB : 10000}); //1 ok
db.collection.insert({fieldA : 15000, fieldB : 8000}); //2 nok
db.collection.insert({fieldA : 24000, fieldB : 22000}); //3 nok
db.collection.insert({fieldA : 22000, fieldB : 1000}); //4 ok
答案 0 :(得分:1)
来自重复问题的调整后的代码:
db.collection.aggregate([
{$project: {
cmp_value: {$cmp: ['$fieldA', {$add: ['$fieldB', 10000]}]},
obj: '$$ROOT'
}},
{$match: {cmp_value: {$gt: 0}}},
{ $replaceRoot: { newRoot: '$obj' } }
])
应尽可能避免{p> $where
。 Documentation非常清楚:
$ where提供了更大的灵活性,但要求数据库处理集合中每个文档的JavaScript表达式或函数