使用新的_id在MongoDB中复制文档

时间:2012-08-01 16:14:28

标签: mongodb

好的,我认为这是一个愚蠢的问题,可能只有一个简单的答案。

如何在MongoDB中复制文档,更改新文档的_id?

成像你有原始文件:

> var orig = db.MyCollection.findOne({_id: 'hi'})

现在我想在集合中使用_id'bye'的另一个文档。

5 个答案:

答案 0 :(得分:93)

只需更改ID并重新插入即可。

> db.coll.insert({_id: 'hi', val: 1})
> var orig = db.coll.findOne({_id: 'hi'})
> orig._id = 'bye'
bye
> db.coll.insert(orig)
> db.coll.find()
{ "_id" : "hi", "val" : 1 }
{ "_id" : "bye", "val" : 1 }

答案 1 :(得分:21)

@ 689响应有点改进

var copy = db.collection.findOne({},{_id:0});
for (var i = 0; i< 30; i++){ 
    db.collection.insert(copy);
}

答案 2 :(得分:18)

您可以为复制文档提供新的ObjectId。在mongo shell中

var copy = db.collection.findOne();
for (var i = 0; i< 30; i++){ 
    copy._id = new ObjectId(); 
    db.collection.insert(copy);
}

答案 3 :(得分:4)

您可以使用以下代码:

使用单行运行:

db.collectionName.find({"_id" : ObjectId("5a4e47e0a21698d455000009")}).forEach(function(doc){var newDoc = doc; delete newDoc._id; db.collectionName.insert(newDoc); })

理解的结构格式:

db.collectionName.find({"_id" : ObjectId("5a4e47e0a21698d455000009")}).forEach(function(doc){
    var newDoc = doc;
    delete newDoc._id;
    db.collectionName.insert(newDoc);
})

答案 4 :(得分:0)

在mongo shell中:可以

db.products.find().forEach( function(doc){db.products.insert(
{
    "price":doc.price,
    "name":doc.name,
    "typeName":doc.typeName,
    "image":doc.image
}
)} );