Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用新的\u id在MongoDB中复制文档_Mongodb - Fatal编程技术网

使用新的\u id在MongoDB中复制文档

使用新的\u id在MongoDB中复制文档,mongodb,Mongodb,好吧,我想这是一个愚蠢的问题,可能有一个简单的答案 如何在MongoDB中复制文档,更改新文档的_id 想象您拥有原始文档: > var orig = db.MyCollection.findOne({_id: 'hi'}) 现在我想要收藏中的另一份文件,id为“再见” 只需更改id并重新插入即可 > db.coll.insert({_id: 'hi', val: 1}) > var orig = db.coll.findOne({_id: 'hi'}) > orig.

好吧,我想这是一个愚蠢的问题,可能有一个简单的答案

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

想象您拥有原始文档:

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

现在我想要收藏中的另一份文件,id为“再见”

只需更改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 }

您可以为副本文档提供新的ObjectId。蒙戈贝壳

var copy = db.collection.findOne();
for (var i = 0; i< 30; i++){ 
    copy._id = new ObjectId(); 
    db.collection.insert(copy);
}
var copy=db.collection.findOne();
对于(var i=0;i<30;i++){
复制。_id=new ObjectId();
db.收集。插入(副本);
}

对@689响应的一点改进

var copy = db.collection.findOne({},{_id:0});
for (var i = 0; i< 30; i++){ 
    db.collection.insert(copy);
}
var copy=db.collection.findOne({},{u id:0});
对于(var i=0;i<30;i++){
db.收集。插入(副本);
}

您可以使用以下代码:

使用单行线运行:

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);
})
理解的结构格式:

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);
})

在mongo shell中:没问题

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

我不知道怎么做。每次插入都会创建一个新的unic _id。添加
删除副本。_id
使用
{code id:0}
无需
删除副本。_id
因为没有获取_id如果我运行此脚本,它只会复制同一文档30次。如何修改此项以复制100个不同的文档(任何文档)?对于轻型用户,必须将上面代码中的
集合
替换为您的实际集合名称。如果要克隆行,但不明确键入新id,只需删除“\u id”属性,然后再执行insert命令:delete orig.\u idFirst var应为常量。伟大的解决方案!