【问题标题】:MongoDB add $lookup result to arrayMongoDB 将 $lookup 结果添加到数组
【发布时间】:2018-12-11 21:26:12
【问题描述】:

我有两个收藏

用户:

{
  { _id: 1, name: 'John' },
  { _id: 2, name: 'Sarah' },
  { _id: 3, name: 'Mike' }
}

服务:

{
  { _id: 1, 
    payment: [
      { uid: 1, paid: true },
      { uid: 2, paid: false }
    ]
  },
  { _id: 2, 
    payment: [
      { uid: 3, paid: true }
    ]
  }
}

我需要这样的结果(来自服务):

{
  { _id: 1, 
    payment: [
      { uid: 1, paid: true, user: { _id: 1, name: 'John' } },
      { uid: 2, paid: false, user: { _id: 2, name: 'Sarah' } }
    ]
  },
  { _id: 2, 
    payment: [
      { uid: 3, paid: true, user: { _id: 3, name: 'Mike' } }
    ]
  }
}

我可以通过 uid 字段进行 $lookup,但是如何在查找结果中为每个项目添加“付费”字段?我知道这一定很简单……但现在不适合我;)

提前致谢!

【问题讨论】:

  • 你需要$unwindpayment然后再$lookup然后使用$group来回滚。类似thisthis

标签: mongodb


【解决方案1】:
db.getCollection('services').aggregate([
    { "$match": {} },
    { "$unwind": '$payment' },
    { "$lookup": {
        "from": "users",
        "localField": "payment.cid",
        "foreignField": "_id",
        "as": "user_data"
    }},
    { "$unwind": '$user_data' },
    { "$addFields": {
        "payment.user.name": "$user_data.name",
    }},
    { "$group": {
        "_id": "$_id",
        "payment": { "$push": "$payment" }
    }}
])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-27
    • 2017-05-06
    • 2018-06-28
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    相关资源
    最近更新 更多