pymongo-将字典附加到列表不起作用

时间:2018-07-25 15:00:59

标签: python database mongodb 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" : [],
}

下一次出现具有相同标题的条目时,应将其追加到该记录的子项键之后。由于时间戳记,$ addToSet应该是唯一的,因此不会与添加到该子级列表的条目相同

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

更新

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

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")
        }
    ],
}

0 个答案:

没有答案