我有一个结构如下的文件:
{
"_id" : 1000001,
"ListMembers" : [
{
"MemberID" : 1000,
"Notes" : "Test Notes for 1000"
},
{
"MemberID" : 1001,
"Notes" : "Test Notes for 1002"
}
]
}
应用程序生成一个唯一 ID。我需要实现以下目标:
- 如果文档不存在,则插入带有数组字段的新文档。
- 如果文档存在于集合中并且成员记录存在于数组中,则更新成员注释
- 如果文档在集合中存在并且数组中不存在成员记录,则在数组中插入成员记录。
这里 #1 和 #2 工作正常,但 {upsert:true} 选项不适用于上面的 #3;如果文档存在但成员记录不存在,它会尝试插入具有相同 ID 的新文档,这显然会给我一个重复键错误。在这种情况下,MongoDB 是否支持 UPSERT 操作,或者我是否需要检查文档是否存在,然后对 #1 和 ($pull 和 $push) 执行 INSERT 以在数组字段上实现 #2 和 #3。