如何在mongo嵌套数组中进行"replace into"操作?



我在下面有一个文档

{
"_id" : 2,
"timestamp" : 1564996848077,
"version" : 1565080156000,
"sku" : [
{
"id" : 3,
"color" : "blue"
}
]
}

我想做的是将三个对象推送到嵌套的"sku"数组中。

{id:1, color: "red"}
{id: 2, color: "dark"} 
{id: 3, color: "white"}.

在插入操作期间,如果数组中存在"id",则将执行更新,而如果"id"不存在,则将执行插入。就像sql中的"替换为"一样,我想得到下面的结果。

{
"_id" : 2,
"timestamp" : 1564996848077,
"version" : 1565080156000,
"sku" : [
{
"id" : 3,
"color" : "white"  <== "update when 3 already exitst"
},
{
"id": 1,           <== "insert"
"color": "dark"
},
{
"id": 2,           <== "insert"
"color": "white"
}
]
}

我尝试了$set/$push/$addToSet,但没有得到正确的结果。

提前感谢您的帮助!

您可以使用以下命令:

db.collection.updateOne({id:3}, {$set:{id:3,color:"white"}, {upsert:true}})

最新更新