我有一组用户,每个用户都可能订阅一项或多项服务。每个服务都有一些元数据,包括用户对该服务的信用数量。
如果我无法知道服务对象的键是什么,我如何才能找到所有对某些服务的积分少于 50 的用户对象?
从概念上讲,它会是这样的,这是行不通的:
db.users.find({services.*.credits : {$lt : 50}})
用户集合:
{
_id: 4f0ea25072139e4d2000001f,
services : {
a : { credits : 100, score : 2000 },
b : { credits : 200, score : 300 },
c : { credits : 10, score : 1300 }
}
},
{
_id: 4f0ea25072139e4d2000001f,
services : {
f : { credits : 68, score : 14 },
q : { credits : 1000, score : 102 },
z : { credits : 59, score : 352 }
}
}
我想做的另一个例子,如果这里不清楚,在这里解释:http://www.mongodb.org/display/DOCS/Advanced+Queries#comment-346075854
最佳答案
这是对您问题的实际答案。
如果您无法知道服务对象的键是什么,如何找到所有对某项服务的积分少于 50 的用户对象。
使用 $where 查询:
db.users.find({
$where: function () {
for (var index in this.services)
if (this.services[index].credits < 50)
return this;
}
});
关于Mongodb点符号通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8840342/