0

我很确定 INSERT 在 mongodb 中是如何工作的,但我想通过 insert 来插入数据,如果 Id 已经存在,我想更新数据,如 mongodb 中的 SAVE。

例子:

如果我在测试集合中的条目是这样的,

{ "_id":ObjectId("68768242ge"), "name":"1"  } 

我知道使用 save 能够将当前数据更新为

db.test.save({ "_id":ObjectId("68768242ge"), "name":"2"  }) 

但是列表更新只能使用 INSERT 查询。

db.test.insert({ "_id":ObjectId("68768242ge"), "name":"2"  }) 

在这种情况下,我会收到一个错误作为重复键。

所以我想做这两个操作,如果对象不存在,那么我想插入它但是好像对象键已经存在那么我想更新它。

有什么方法可以实现吗?我想使用 mongodb 进行批量插入/更新。

4

1 回答 1

1

你想要做的就是所谓的“upsert”。

一些更新还会创建记录。如果更新操作指定了 upsert 标志并且没有与更新操作的查询部分匹配的文档,则 MongoDB 会将更新转换为插入。

> db.test.update({"_id" : ObjectId("529f4ddd6487ccbe70e44c75")},{"name":"orig"},{upsert: true})
> db.test.find(); { "_id" : ObjectId("529f502aef047d0c12c305d5"), "name" : "orig" }
> db.test.update({"_id" : ObjectId("529f502aef047d0c12c305d5")},{"name":"new"},{upsert: true});
> db.test.find(); { "_id" : ObjectId("529f502aef047d0c12c305d5"), "name" : "new" }

您可以查看db.collection.update()的 MongoDB 文档。

于 2013-12-04T15:58:40.723 回答