我在貓鼬中有一個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