MongoDB查找,更改,插入文件批量操作

时间:2017-03-22 10:59:03

标签: mongodb spring-mongo

将MongoDB与spring mongo一起使用,我正在寻找一种方便有效的方法来复制与特定查询匹配的文档,并将其再次批量插入到同一集合中,其中一个属性已更改。

编辑:也许这个问题还不够明确:我没有搜索批量更新:在集合中,我想找到所有符合foo =" bar"的文档,更改为foo =" baz",并将更改的文档作为副本插入同一集合中。 AFAIR,提到的重复问题并不能涵盖这一点。

有关于此的任何想法吗?

1 个答案:

答案 0 :(得分:1)

复制时,您应确保不复制ID。每个文档在集合中都有唯一ID

您可以运行以下MongoDB命令:

db.collection.insert({_id: '1234', val: "abcd"})
var existingDocument = db.collection.findOne({_id: '1234'}) // get a local copy of the document.
existingDocument._id = '5678'   // changing the copied document id.

db.collection.insert(existingDocument) // insert into the MongoDB the same document with different id.

现在运行命令:

db.collection.find()

将返回

{ "_id" : "1234", "val" : "abcd" }
{ "_id" : "5678", "val" : "abcd" }

为了更新,您可以在插入之前使用以下命令:

db.collection.update(
   { _id: "5678" },
   { $set: { "val": "xyz" } }
)

现在运行时:

db.collection.find()

结果将是:

{ "_id" : "1234", "val" : "abcd" }
{ "_id" : "5678", "val" : "xyz" }