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

时间:2011-01-23 16:16:51

标签: arrays mongodb upsert

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

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

我想要某种upsert声明。如果已存在此类文档,则需要向event events数组添加user_id,否则需要使用event项创建文档。< / p>

能做到吗?

1 个答案:

答案 0 :(得分:17)

您可以在Mongo中执行upsert,请参阅Mongo doc中的“带修饰符的Upserts”:

  

您可以将upsert与修饰符一起使用   操作。在这种情况下,   修饰符将应用于   更新标准成员和   将插入结果对象。

您需要的查询如下:

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