mongodb - 如果不存在则创建doc,否则推送到数组

Lio*_*orH 12 arrays upsert mongodb

我有一份以下表格的文件:

{
"_id" : ObjectId("4d2d8deff4e6c1d71fc29a07"),
"user_id" : "714638ba-2e08-2168-2b99-00002f3d43c0",
"events" : [
        {
                "profile" : 10,
                "data" : "....."
        }
        {
                "profile" : 10,
                "data" : "....."
        }
        {
                "profile" : 20,
                "data" : "....."
        }
        ...
   ]
 }
Run Code Online (Sandbox Code Playgroud)

我想upsert发表一些声明.它需要一个添加eventevents阵列user_id中的情况下,已经有这样的文档存在,否则就需要创建与该文档event项.

可以这样做吗?

Jav*_*ero 19

您可以在Mongo中执行upsert,请参阅Mongo doc中的 "使用修饰符进行Upsert" :

您可以使用带有修改器操作的upsert.在这种情况下,修饰符将应用于更新标准成员,并将插入生成的对象.

您需要的查询如下所示:

db.events.update( { "user_id" : "714638ba-2e08-2168-2b99-00002f3d43c0" }, 
{ $push : { "events" : { "profile" : 10, "data" : "X"}}}, {"upsert" : true});
Run Code Online (Sandbox Code Playgroud)

  • 注意 - 使用 $addToSet 而不是 $push。您可能不想要重复的元素。 (3认同)
  • @Javier Ferrero 示例仅显示 $push,如果 user_id 之后还有像 user_type 这样的字段也必须更新..? (2认同)
  • @KanagaveluSugumar,然后组合:`{ $set: {...}, $push: {...} }` (2认同)