MongoDB: insert on duplicate key update

2019-02-21 13:07发布

问题:

How can do this with Mongo in one [atomic] statement:

insert mytable set MyUniqueKey = ?, X = ? on duplicate key update Y = ?

When this statement is executed for first time it will set X value but after that it will only update Y value.

Only MyUniqueKey is part of unique key and should be looked up for duplicates.

回答1:

You are looking for the upsert option on the Update command. The docs should be enough here.



回答2:

I asked this question on mongodb user group, the answer was that it is not possible and this is an open issue.



回答3:

From

$setOnInsert

I would call it "MyCollection" instead of "mytable". You can do the following:

db.mycollection.update(
   { MyUniqueKey: "?" },
   {  
      $set: {"y": "?"},
      $setOnInsert: {
          MyUniqueKey: "?",
           "x": "?",
   },
   { upsert: true }
)

Basically the $set runs always, except when document does not exist. Then $setOnInsert will run.