mongodb - создать документ, если он не существует, иначе нажать на массив - PullRequest
11 голосов
/ 23 января 2011

У меня есть документ в следующей форме:

{
"_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.

Можно ли это сделать?

1 Ответ

17 голосов
/ 23 января 2011

Вы можете сделать upserts в Mongo, см. «Upserts with Modifiers» из Mongo doc :

Вы можете использовать upsert с модификатором. операция. В таком случае модификаторы будут применяться к обновить критерии члена и Полученный объект будет вставлен.

Ваш запрос будет выглядеть так:

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