我有一个"组"集合来自另一个"项目"采集。 group
集合只是来自item
集合的ObjectId数组,但是我想让group
数组中的对象更复杂,并且仍然可以使用$in
和$nin
运营商。
如何将$in
运算符使用的值更改为对象而不是仅将ObjectId更改为$in
?
// current group document
{
_id: ObjectId(...),
items: [
ObjectId(...),
ObjectId(...)
]
}
// current item find query
db.item.find({ _id : { $in: group.items } }
我想将group
文档更改为如下所示
{
_id: ObjectId(...),
items: [
{ _id : ObjectId(...), name: '...' },
{ _id : ObjectId(...), name: '...' }
]
}
答案 0 :(得分:2)
将您的组数组转换为一个简单的ID数组,用于find():
// revised item find logic
var itemGroupItemIds = group.items.map(function(item){
return item._id
});
db.item.find({ _id : { $in: itemGroupItemIds } });