MongoDB。选择其他选择中存在的字段

MongoDB。选择其他选择中存在的字段,mongodb,mongodb-query,aggregation-framework,lookup,Mongodb,Mongodb Query,Aggregation Framework,Lookup,我有两个收藏。我需要根据字段值在第二个集合中存在的条件从第一个集合中选择文档。例如: 用户\项目集合具有如下文档 { '_id' ..., 'uid' : 123, 'iid' : 'a123', 'quantity' : 10 } { '_id' ..., 'iid' : 'a456', 'name' : 'someItem' } 第二个集合包含一些项目,如下所示 { '_id' ..., 'uid' : 123, 'iid' : 'a123',

我有两个收藏。我需要根据字段值在第二个集合中存在的条件从第一个集合中选择文档。例如:

用户\项目集合具有如下文档

{
  '_id' ...,
  'uid' : 123,
  'iid' : 'a123',
  'quantity' : 10
} 
{
  '_id' ...,
  'iid' : 'a456',
  'name' : 'someItem'
}
第二个集合包含一些项目,如下所示

{
  '_id' ...,
  'uid' : 123,
  'iid' : 'a123',
  'quantity' : 10
} 
{
  '_id' ...,
  'iid' : 'a456',
  'name' : 'someItem'
}
我需要通过两个集合中一致的项目id(“iid”)获取样本。给出了预期的结果

{
 '_id'  : ...,
 'uid' : 123,
 'iid': 'a123',
 'name' : 'item123'
 }
我在用户_项中使用了$lookup,但是它返回第一个集合中的每个文档,并且有很多空数组。我想避免它

如果$lookup In items from user_items,它将返回一个用户数组。这也不是期望的结果


查找中是否有一些选项,或者可能是此问题的另一种解决方案?

您可以使用下面的聚合

db.User_Item.aggregate([
  { "$lookup": {
    "from": "second",
    "localField": "iid",
    "foreignField": "iid",
    "as": "second"
  }},
  { "$match": { "second": { "$ne": [] }}},
  { "$addFields": {
    "name": { "$arrayElemAt": ["$second.name", 0] }
  }},
  { "$project": { "second": 0 }}
])

@Catherinenova更新了我的答案。只需在
$lookup
之后使用
$match
阶段。