Mongo字段A大于字段B加上一个值

时间:2017-05-22 10:00:06

标签: mongodb

我希望获得符合此条件的 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

1 个答案:

答案 0 :(得分:1)

来自重复问题的调整后的代码:

db.collection.aggregate([
    {$project: {
        cmp_value: {$cmp: ['$fieldA', {$add: ['$fieldB', 10000]}]},
        obj: '$$ROOT'
    }},
    {$match: {cmp_value: {$gt: 0}}}, 
    { $replaceRoot: { newRoot: '$obj' } }
])
应尽可能避免{p> $whereDocumentation非常清楚:

  

$ where提供了更大的灵活性,但要求数据库处理集合中每个文档的JavaScript表达式或函数

相关问题