首页 > 解决方案 > pymongo - 将字典附加到列表中不起作用

问题描述

我有一个 mongoDB 列表issues。该记录有一个children属性,起初是一个空列表。下次出现具有相同标题的问题时,我想附加到已经创建的条目。

我正在尝试以下工作。但是当我尝试使用 $addToSet 时出现错误。

我得到的错误: Updating the path 'children' would create a conflict at 'children'

这就是我目前正在尝试做的事情。

db.issues.update_one({'title': issue['title']},
                             {
                                 "$setOnInsert": {"insertion_date": now, "children": []},
                                 "$set": {"last_update_date": now},
                                 "$addToSet": {"children": {'title': issue['title'], 'date': now} },
                             },
                             upsert=True)

第一次创建条目时,它应该如下所示

{
    "_id" : ObjectId("5b588b305b2eec7d7029fb4a"),
    "title" : "title_1",
    "last_update_date": ISODate("2018-07-25T14:41:50.168Z"),
    "children" : [],
}

下次出现具有相同标题的条目时,它应该只是附加到该记录的 children 键。由于时间戳,$addToSet 应该是唯一的,因此它不会是添加到该子列表中的相同条目

{
    "_id" : ObjectId("5b588b305b2eec7d7029fb4a"),
    "title" : "title_1",
    "children" : [ 
                    {
                        "title": title_1,
                        "date": ISODate("2018-07-25T14:41:50.168Z")
                    } 
                 ],
}

更新

如果我这样做,它可以工作,但第一个条目也会将它添加到 children 键,而不是它是一个空列表。

db.issues.update_one({'title': issue['title']},
                             {
                                 "$setOnInsert": {"insertion_date": now},
                                 "$set": {"last_update_date": now},
                                 "$addToSet": {"children": {'title': issue['title'], 'date': now}},
                             },
                             upsert=True)

给出以下结果:

{
    "title" : title_1,
    "children" : [ 
        {
            "title" : "title_1",
            "date" : ISODate("2018-07-25T15:55:45.134Z")
        }
    ],
}

标签: pythondatabasemongodbpymongo

解决方案


推荐阅读