0

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

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

2 回答 2

3

你有几个选择,要么你使用聚合框架,要么你做这样的事情

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

更多关于聚合框架的信息(即使这对你的情况来说似乎有点过分):

于 2013-05-16T11:19:59.227 回答
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 }

然后,您可能希望使用此处描述的增量更新模式。

于 2013-05-16T12:24:16.863 回答