【问题标题】:How to lookup inside array in mongodb aggregate? [duplicate]如何在 mongodb 聚合中查找数组内部? [复制]
【发布时间】:2021-05-04 16:13:18
【问题描述】:

我对如何使用 mongodb 聚合在数组内部进行查找有疑问。

例如,我有一个这样的用户数据 json:

{
   "_id": "1234",
   "name": "Tony",
   "language": [
       {
           "_id": "111",
           "language_id": "919",
           "level": "Expert"
       }
       {
           "_id": "111",
           "language_id": "920",
           "level": "Basic"
       }
   ]
} 

还有我的语言集:

{
   "_id": "919",
   "name": "English"
},
{
   "_id": "920",
   "name": "Chinese"
}

我想进行 mongodb 聚合,结果如下:

{
   "_id": "1234",
   "name": "Tony",
   "language": [
       {
           "name": "English",
           "level": "Expert"
       }
       {
           "name": "Chinese",
           "level": "Basic"
       }
   ]
} 

之前谢谢。

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:
    • $unwind解构language数组
    • $lookup 有语言集合
    • $arrayElemAt 从语言返回结果中选择特定索引元素
    • $group by _id 并重构 language 数组
    db.user.aggregate([
      { $unwind: "$language" },
      {
        $lookup: {
          from: "language",
          localField: "language.language_id",
          foreignField: "_id",
          as: "language.name"
        }
      },
      {
        $group: {
          _id: "$_id",
          name: { $first: "$name" },
          language: {
            $push: {
              name: { $arrayElemAt: ["$language.name.name", 0] },
              level: "$language.level"
            }
          }
        }
      }
    ])
    

    Playground

    【讨论】:

    • 感谢它的工作,但 $group 不起作用,因为我有一个 $project 可以在下面显示字段
    • 当我添加 $group 时,我的结果返回 null [ ]
    • 你在哪里添加了 $project 阶段?
    • 如果我有另一个查找,例如验证数据怎么办。检查:mongoplayground.net/p/nqZtqQ_BgLb 我想显示 verify.status: 1
    • 我可以看到第三个集合,但是您要查找的基础是什么不知道目的,如果是新问题,那么您可以提出新问题并详细解释。
    猜你喜欢
    • 1970-01-01
    • 2020-12-18
    • 2017-11-08
    • 2021-08-03
    • 2016-08-05
    • 2020-05-17
    • 2021-01-08
    • 2022-01-03
    • 2017-05-05
    相关资源
    最近更新 更多