如何查找退休减去年龄小于10的记录
db.users.insert({
user_id: "bcd001",
age: 56,
retirement: 65,
status: "A"
})
答案 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所述的增量更新模式。