繁体   English   中英

如何在 mongodb 上建立嵌套关系?

[英]How to make a nested relationship on mongodb?

例如,我有 4 个 collections。 有:

  1. “公司”合集
{
 "id_company": "C01"
 "company_name": "Sidomuncul"
 "like": [
  "123",
  "121"
 ]
}

  1. “用户”集合
{
  "id_user": "123",
  "name": "Astra",
  "major": "111",
  "language": [{
     "id_language": "101",
     "level": "Expert"
  }]
},
{
  "id_user": "121",
  "name": "Bibi",
  "id_major": "112",
  "language": [{
     "id_language": "102",
     "level": "Intermediate"
  }]
}
  1. “主要”收藏
{
   "id_major": "111",
   "name": "IT" 
},
{
   "id_major": "112",
   "name": "Designer" 
}
  1. “语言”集合
{
   "id_language": "101",
   "name": "English" 
},
{
   "id_language": "102",
   "name": "Chinese" 
}

当我通过 id_company“C01”为获得类似公司的人制定路线时,我想在“like”字段中显示结果关系 id_user 和用户集合。 示例结果:

{
   "id_company": C01",
   "like": [
    {
     "id_user": "123",
     "name": "Astra",
     "major": "IT",
     "language": [{
        "id_language": "English",
        "level": "Expert"
     }]
    },
    {
     "id_user": "121",
     "name": "Bibi",
     "id_major": "Designer",
     "language": [{
        "id_language": "Chinese",
        "level": "Intermediate"
     }]
     }
    ] //Close Like Field
}

之前谢谢。

解决了

使用查找和组也推送

使用Mongo 聚合管道,您可以在多个阶段收集所需的结果。 对于 mongo 聚合查询,您可以使用$lookup$set$unwind$group阶段。 试试这个查询,你可能会得到所需的结果集:

db.company.aggregate([
  {
    "$unwind": "$like"
  },
  {
    $lookup: {
      from: "user",
      localField: "like",
      foreignField: "id_user",
      as: "like"
    }
  },
  {
    "$unwind": "$like"
  },
  {
    $lookup: {
      from: "major",
      localField: "like.major",
      foreignField: "id_major",
      as: "major"
    }
  },
  {
    "$unwind": "$major"
  },
  {
    $set: {
      "like.major": "$major.name"
    }
  },
  {
    $lookup: {
      from: "language",
      localField: "like.language.id_language",
      foreignField: "id_language",
      as: "lang"
    }
  },
  {
    "$unwind": "$lang"
  },
  {
    $set: {
      "like.language.id_language": "$lang.name"
    }
  },
  {
    $group: {
      _id: "id_company",
      company_name: {
        "$first": "$company_name"
      },
      like: {
        $push: {
          id_user: "$like.id_user",
          major: "$like.major",
          name: "$like.name",
          language: "$like.language"
        }
      }
    }
  }
])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM