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