使用 pymongo(python、mongodb)推送到嵌套数组

问题描述 投票:0回答:1

我在“courses”内找到正确的元素来推送新的元素数组“course_content”时遇到一些困难。

我有:

{
  '_id': ObjectId('65759a25ccee59d54778968e'),
  'user_email': '[email protected]',
  'password': 'password123',
  'courses': [
    {
      'course_name': 'great course',
      'course_info': 'Course info great course'
    },
    {
      'course_name': 'bad course',
      'course_info': 'Course info bad course'
    }
  ]
}

我想要什么:

{
  '_id': ObjectId('65759a25ccee59d54778968e'),
  'user_email': '[email protected]',
  'password': 'password123',
  'courses': [
    {
      'course_name': 'great course',
      'course_info': 'Course info great course'
      'course_content: [{summary: "the quick brown fox",
                        info:"this is from a particular source"
                       }]
    },
    {
      'course_name': 'bad course',
      'course_info': 'Course info bad course'
    }
  ]
}

随后,我想添加到 course_content 中,如下所示:

{
  '_id': ObjectId('65759a25ccee59d54778968e'),
  'user_email': '[email protected]',
  'password': 'password123',
  'courses': [
    {
      'course_name': 'great course',
      'course_info': 'Course info great course'
      'course_content: [{summary: "the quick brown fox",
                        info:"this is from a particular source"
                       },
                        {summary: "jumps over the lazy",
                        info:"this a great story"
                       },
                       {summary: "dogs",
                        info:"dogs are cool"
                       }]
    },
    {
      'course_name': 'bad course',
      'course_info': 'Course info bad course'
    }
  ]
}

我能够找到我想要更新的内容。

collection.find_one(
            {'_id': ObjectId(session_document_id)},
            {'courses': {'$elemMatch': {'course_name': 'great course'}}}
        )

但是,我无法推动它。

collection.update_one(
            {'_id': ObjectId(session_document_id)},
            {'courses': {'$elemMatch': {'course_name': 'great course'}}},
            {'$push': {'courses.$.course_name':{summary: "the quick brown fox",
                        info:"this is from a particular source"
                       }}}
        )

如有任何帮助,我们将不胜感激。

python mongodb pymongo push
1个回答
0
投票

使用

arrayFilters
定位课程条目,并使用
$push
使用
$each
定位数组。

db.collection.update({
  "courses.course_name": "great course"
},
{
  "$push": {
    "courses.$[course].course_content": {
      "$each": [
        {
          "summary": "the quick brown fox",
          "info": "this is from a particular source"
        }
      ]
    }
  }
},
{
  "arrayFilters": [
    {
      "course.course_name": "great course"
    }
  ],
  "multi": true
})

蒙戈游乐场

© www.soinside.com 2019 - 2024. All rights reserved.