[MONGODB] 어떻게 MongoDB를 문서의 _id를 업데이트?
MONGODB어떻게 MongoDB를 문서의 _id를 업데이트?
나는 하나 개의 문서의 _id 필드를 업데이트합니다. 나는 그것이 정말 좋은의 연습이 아니다 알고있다. 그러나 몇 가지 기술적 인 이유로, 나는 그것을 업데이트 할 필요가있다. 나는 그것을 업데이트하려고하면 내가 얻을 :
> db.clients.update({ _id: ObjectId("123")}, { $set: { _id: ObjectId("456")}})
Performing an update on the path '_id' would modify the immutable field '_id'
그리고 업데이트가 이루어지지 않습니다. 어떻게 업데이트 할 수 있습니다?
해결법
-
==============================
1.당신은 그것을 업데이트 할 수 없습니다. 새 _id를 사용하여 문서를 저장해야하고 기존 문서를 제거 할 수 있습니다.
당신은 그것을 업데이트 할 수 없습니다. 새 _id를 사용하여 문서를 저장해야하고 기존 문서를 제거 할 수 있습니다.
// store the document in a variable doc = db.clients.findOne({_id: ObjectId("4cc45467c55f4d2d2a000002")}) // set a new _id on the document doc._id = ObjectId("4c8a331bda76c559ef000004") // insert the document, using the new _id db.clients.insert(doc) // remove the document with the old _id db.clients.remove({_id: ObjectId("4cc45467c55f4d2d2a000002")})
-
==============================
2.전체 컬렉션을 당신은 또한 루프를 사용할 수 있습니다 위해 그것을하기 위해 (닐스 예 기준) :
전체 컬렉션을 당신은 또한 루프를 사용할 수 있습니다 위해 그것을하기 위해 (닐스 예 기준) :
db.status.find().forEach(function(doc){ doc._id=doc.UserId; db.status_new.insert(doc); }); db.status_new.renameCollection("status", true);
이 경우 사용자 아이디는 새로운 ID 내가 사용하고 싶었습니다
-
==============================
3.경우에, 당신은 (당신이 어떤 _ids 접두사하려는 경우, 예를 들어) 같은 컬렉션 _id의 이름을 변경하려면 :
경우에, 당신은 (당신이 어떤 _ids 접두사하려는 경우, 예를 들어) 같은 컬렉션 _id의 이름을 변경하려면 :
db.someCollection.find().snapshot().forEach(function(doc) { if (doc._id.indexOf("2019:") != 0) { print("Processing: " + doc._id); var oldDocId = doc._id; doc._id = "2019:" + doc._id; db.someCollection.insert(doc); db.someCollection.remove({_id: oldDocId}); } });
경우 (doc._id.indexOf ( "2019")! = 0) {... 대해 forEach가 삽입 된 문서를 집어 때문에, 무한 루프를 방지하기 위해 필요하더라도 throught를 .snapshot () 메소드를 사용했다.
-
==============================
4.여기에 내가 루프와 오래된 문서 제거를위한 여러 요청을 피하기 해결책을 가지고 있습니다.
여기에 내가 루프와 오래된 문서 제거를위한 여러 요청을 피하기 해결책을 가지고 있습니다.
() ObjectId가 : _id : 당신은 쉽게 수동으로 같은 것을 사용하여 새로운 아이디어를 만들 수 있습니다 그러나 알고 몽고가 자동으로 실종, 당신은 문서의 모든 필드를 포함하는 $ 프로젝트를 만들 집계 사용할 수있는 경우 _id를 할당하지만, 필드 _id를 생략합니다. 그런 다음 밖으로 $로 저장할 수 있습니다
문서 인 경우 그래서 :
{ "_id":ObjectId("5b5ed345cfbce6787588e480"), "title": "foo", "description": "bar" }
그런 다음 쿼리는 다음과 같습니다
db.getCollection('myCollection').aggregate([ {$match: {_id: ObjectId("5b5ed345cfbce6787588e480")} } {$project: { title: '$title', description: '$description' } }, {$out: 'myCollection'} ])
from https://stackoverflow.com/questions/4012855/how-update-the-id-of-one-mongodb-document by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB의 쿼리 도움말 - 하위 오브젝트의 모든 키의 값에 대한 쿼리 (0) | 2019.11.30 |
---|---|
[MONGODB] MongoDB의에서 수집 기록 내부 배열을 정렬하는 방법 (0) | 2019.11.30 |
[MONGODB] MongoDB를하고 "조인"[중복] (0) | 2019.11.30 |
[MONGODB] 나는 MongoDB를 ObjectId가 날짜별로 조회 할 수 있습니까? (0) | 2019.11.30 |
[MONGODB] 몽구스 단일 Node.js를 프로젝트에서 여러 데이터베이스 (0) | 2019.11.30 |