首页 > 解决方案 > 追加到数组pymongo

问题描述

我想bookmarks通过 id 更新数组_id_collection

result = collections.find_one({"_id": ObjectId(id)},
        { 'array_of_collections': { '$elemMatch': { '_id_collection': ObjectId('5e9871582be940b6af4a9b41') }}})
print(result) # {'_id': ObjectId('5e986b4a07b94384ae8016b7'), 'array_of_collections': [{'_id_collection': ObjectId('5e9871582be940b6af4a9b41'), 'name_of_collection': 'test2', 'bookmarks': []}]}

这是我搜索此对象的结果代码,现在我可以在bookmarks数组中附加一些值,但我不知道该怎么做。在这张照片上你可以看到我的 monbodb 结构。 mongodb结构

标签: pythonpython-3.xmongodbpymongo

解决方案


如果您将其$elemMatch作为查询的一部分然后使用位置运算符$,您可以成功地将值推送到所需的书签数组。

试试这个:

import pprint

from bson import ObjectId
from pymongo import MongoClient

client = MongoClient()
db = client.tst1
coll = db.coll6

coll.update_one({"_id": ObjectId("5e9898c69c26fe7ba93476f6"),
                 'array_of_collections': {'$elemMatch': {'_id_collection': ObjectId("5e9898c69c26fe7ba93476f4")}}},
                {'$push': {'array_of_collections.$.bookmarks': 'Pushed Value 1'}})

mlist1 = list(coll.find())

for mdoc in mlist1:
    pprint.pprint(mdoc)

结果文件:

{'_id': ObjectId('5e9898c69c26fe7ba93476f6'),
 'array_of_collections': [{'_id_collection': ObjectId('5e9898c69c26fe7ba93476f2'),
                           'bookmarks': [],
                           'name_of_collection': 'test'},
                          {'_id_collection': ObjectId('5e9898c69c26fe7ba93476f3'),
                           'bookmarks': [],
                           'name_of_collection': 'test2'},
                          {'_id_collection': ObjectId('5e9898c69c26fe7ba93476f4'),
                           'bookmarks': ['Pushed Value 1'],
                           'name_of_collection': 'test3'},
                          {'_id_collection': ObjectId('5e9898c69c26fe7ba93476f5'),
                           'bookmarks': [],
                           'name_of_collection': 'test4'}]}

推荐阅读