【问题标题】:MongoDB add to joining collection field from base oneMongoDB从基础添加到加入集合字段
【发布时间】:2019-02-24 13:39:53
【问题描述】:

我有两个收藏:

带有架构的游戏:

 _id: ObjectId('gameId'),
 questions: [
   {
     position: 1,
     question_id: ObjectId('baz')
   },
   {
     position: 2,
     question_id: ObjectId('ban')
   },
 ]

架构问题:

 _id: ObjectId('baz'),
 text: 'FooBar'

现在我想将问题加入到游戏中,并在每个问题记录中添加question_position

所以,我有这样的查询:

db.games.aggregate([
    {
      $lookup: {
        from: 'questions',       
        localField: 'questions.question_id',
        foreignField: '_id',       
        as: 'question_data',     
      },   
     }])

返回所有必需的信息,并根据问题数组正确连接,

 _id: ObjectId('gameId'),
 questions: [
   {
     position: 1,
     question_id: ObjectId('baz')
   },
   {
     position: 2,
     question_id: ObjectId('ban')
   }
 ],
 question_data: [
   {
     _id: ObjectId('baz'),
     text: 'FooBar',
   },
   {
     _id: ObjectId('ban'),
     text: 'FooBar2',
   }
 ]

但我完全不知道如何根据游戏将其位置添加到连接问题中。 看起来像这样:

 _id: ObjectId('gameId'),
 questions: [
   {
     position: 1,
     question_id: ObjectId('baz')
   },
   {
     position: 2,
     question_id: ObjectId('ban')
   }
 ],
 question_data: [
   {
     _id: ObjectId('baz'),
     text: 'FooBar',
     position: 1,
   },
   {
     _id: ObjectId('ban'),
     text: 'FooBar2',
     position: 2,
   }
 ]


我已经尝试在游戏集合中使用$unwind 作为问题数组,在aggregation 中使用$project 玩了一点,但仍然没有结果。

所以,我的问题是,如何将基础集合中的字段添加到另一个集合中的连接数据中

【问题讨论】:

    标签: mongodb join merge aggregation-framework lookup


    【解决方案1】:

    你需要先$unwindquestions数组然后需要应用$lookup最后使用$group再次回滚到数组中。

    db.games.aggregate([
      { "$unwind": "$questions" },
      { "$lookup": {
        "from": "questions",
        "localField": "questions.question_id",
        "foreignField": "_id",
        "as": "question_data"
      }},
      { "$unwind": "$question_data" },
      { "$addFields": {
        "question_data.position": "$questions.position",
        "question_data.question_id": "$questions.question_id"
      }},
      { "$group": {
        "_id": "$_id",
        "questions": { "$push": "$questions" },
        "question_data": { "$push": "$question_data" }
      }}
    ])
    

    【讨论】:

    • 像魅力一样工作!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2020-11-12
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 2016-10-22
    相关资源
    最近更新 更多