반응형
새 _id를 사용하여 MongoDB에서 문서 복제
좋아요, 저는 이것이 어리석은 질문이고 아마도 간단한 답을 가지고 있을 것이라고 생각합니다.
새 문서의 _id를 변경하여 MongoDB에서 문서를 복제하려면 어떻게 해야 합니까?
원본 문서가 있는 이미징:
> var orig = db.MyCollection.findOne({_id: 'hi'})
그리고 이제 _id 'bye'가 있는 다른 문서가 컬렉션에 필요합니다.
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);
}
@689 응답에 대한 약간의 개선.
var copy = db.collection.findOne({},{_id:0});
for (var i = 0; i< 30; i++){
db.collection.insert(copy);
}
아래 코드를 사용할 수 있습니다.
단일 선을 사용하여 실행:
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.products.find().forEach( function(doc){db.products.insert(
{
"price":doc.price,
"name":doc.name,
"typeName":doc.typeName,
"image":doc.image
}
)} );
이전 답변 중 많은 것이 간단하고 정확하지만, 컬렉션의 모든 문서를 새 것으로 복사하는 것이 목표라면 효율적이지 않습니다._id
다음은 10배 이상 빠른 세 가지 솔루션입니다.
먼저 컬렉션을 효율적으로 복사합니다.
db.collection.aggregate([{ $out: "collection_copy" }]);
이제 사본의 문서를 원본으로 다시 전달하지만, 문서를 제거합니다._id
아주 새로운_id
생성됨:
db.collection_copy.aggregate([{$project: {_id: 0}}, { $merge: "collection" }]);
마지막으로 복사본을 정리합니다.
db.collection_copy.drop();
한 줄
(function(doc){delete doc._id; db.collection.insert(doc)})(db.collection.findOne({ _id: ObjectId("60c9a684c7d51907c35ad463")}))
구조화된
(function(doc) {
delete doc._id;
db.collection.insert(doc);
})(db.collection.findOne({ _id: ObjectId('60c9a684c7d51907c35ad463') }));
// (function(doc){...})(doc)
언급URL : https://stackoverflow.com/questions/11763384/duplicate-a-document-in-mongodb-using-a-new-id
반응형
'programing' 카테고리의 다른 글
Node.js에서 기본 HTML 로드 (0) | 2023.05.26 |
---|---|
Python 3에서 바이트에 대한 b' 접두사 없이 인쇄 (0) | 2023.05.26 |
pep8.py 을 Eclipse에 통합하는 방법은 무엇입니까? (0) | 2023.05.21 |
Visual Studio - Resx 파일의 기본값은 'internal'에서 'public'입니다. (0) | 2023.05.21 |
UI에서 제스처 탭을 호출하는 방법 프로그래밍 방식으로 신속하게 보기 (0) | 2023.05.21 |