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

2021-09-17 00:08:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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")
        }
    ],
}