マングースに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コレクションをクエリして1人のPersonだけを取得し、探しているものだけを(醜いループなしで)除外できますか?