【发布时间】:2013-02-19 05:19:22
【问题描述】:
我在 mongoose 中有一个 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 和“事物”的一些唯一 id。通过 id 获取 Person 可能要快得多:
Person.findById(personId, function(err, person) { ...
然后遍历所有东西以找到正确的:
var thing
person.things.forEach(function(t) {
if (t.id == thingId) {
thing = t;
}
});
我想知道是否有更好的方法。 IE。我可以通过 id 查询 Person 集合以仅获取一个 Person 然后过滤掉我正在寻找的东西(没有丑陋的循环)吗?
【问题讨论】:
-
things.$是什么意思?$指的是/做什么? -
$是一个位置运算符。您可以在Mongo docs 中找到有关它的更多详细信息;)