15

我有一份格式如下的文件:

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

我想发表一些upsert声明。它需要eventevents数组user_id中添加一个以防万一已经存在这样的文档,否则它需要使用该event项目创建文档。

可以这样做吗?

4

1 回答 1

27

您可以在 Mongo 中进行 upserts,请参阅Mongo doc中的“Upserts with Modifiers” :

您可以将 upsert 与修饰符操作一起使用。在这种情况下,修改器将应用于更新条件成员,并插入生成的对象。

您需要的查询将如下所示:

db.events.update( { "user_id" : "714638ba-2e08-2168-2b99-00002f3d43c0" }, 
{ $push : { "events" : { "profile" : 10, "data" : "X"}}}, {"upsert" : true});
于 2011-01-23T16:49:23.213 回答