mongodb:.find()中的算术运算

时间:2013-05-16 11:07:20

标签: mongodb nosql

如何查找退休减去年龄小于10的记录

db.users.insert({
  user_id: "bcd001",
  age: 56,
  retirement: 65,
  status: "A"
})

2 个答案:

答案 0 :(得分:3)

您有两个选择,要么使用聚合框架,要么执行类似

的操作
db.users.find({$where: '(this.retirement - this.age > 10)'})

关于聚合框架的更多信息(即使这对您的案例来说似乎有些过分):

答案 1 :(得分:2)

(考虑将retiring计算作为User文档的一部分插入时(预先计算))

您也可以使用MapReduce,这可能比使用$where更有效,具体取决于您使用结果的方式(此外,结果将被保留)。以下是使用MongoDB shell的示例:

var map=function(){
    if (this.retirement - this.age < 10)  {
        emit(this.user_id, this.user_id, this.retirement - this.age);
    }
};

var reduce=function(key, values) {
    return Array.sum(values);
};

然后执行:

db.users.mapReduce(map, reduce, {out: 'retiring' })

结果:

> db.retiring.find()
{ "_id" : "bcd001", "value" : 9 }

您可能希望使用here所述的增量更新模式。