我在猫鼬中有一个Person对象,而这个person对象有多个东西(每个东西都有一个唯一的ID)。根据数组元素查找对象,只返回匹配的数组元素?
person1 = {
things[{id: 1, name: 'one'},{id:2, name: 'two'}]
}
person2 = {
things[{id: 3, name: 'three'},{id:4, name: 'four'}]
}
然后查询:
Person.findOne({'things.id': 2},{'things.$': 1}, function(err, person) { ...
这个伟大的工程,但我通过所有的Person对象(其中可能有很多的)搜索。在这种情况下,我知道我需要的人的身份证和一些'事物'的唯一身份证。它可能是一个速度快了很多的ID来获得人:
Person.findById(personId, function(err, person) { ...
然后遍历所有的事情找到正确的:
var thing
person.things.forEach(function(t) {
if (t.id == thingId) {
thing = t;
}
});
我想知道是否有更好的方法是。 I.E.我可以通过id查询Person集合来得到一个Person,然后过滤掉我正在寻找的东西(没有丑陋的循环)?
这是什么东西'$'是什么意思? '$'指的是/做什么? – 2013-12-31 15:14:07
'$'是位置运算符。您可以在[Mongo文档](http://docs.mongodb.org/manual/reference/operator/projection/positional/)中找到更多关于它的细节;) – 2014-10-23 13:38:54