Hướng dẫn how do i change the id field in mongodb? - làm cách nào để thay đổi trường id trong mongodb?

173

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi muốn cập nhật một trường _id của một tài liệu. Tôi biết nó không thực sự tốt thực hành. Nhưng vì một số lý do kỹ thuật, tôi cần cập nhật nó.

Nếu tôi cố gắng cập nhật nó, tôi sẽ nhận được:

db.clients.update({ _id: ObjectId("123")}, { $set: { _id: ObjectId("456")}})

Performing an update on the path '_id' would modify the immutable field '_id'

Và bản cập nhật bị từ chối. Làm thế nào tôi có thể cập nhật nó?

Hướng dẫn how do i change the id field in mongodb? - làm cách nào để thay đổi trường id trong mongodb?

Sqb

3.8202 Huy hiệu vàng26 Huy hiệu bạc47 Huy hiệu đồng2 gold badges26 silver badges47 bronze badges

Hỏi ngày 25 tháng 10 năm 2010 lúc 8:19Oct 25, 2010 at 8:19

Bạn không thể cập nhật nó. Bạn sẽ phải lưu tài liệu bằng cách sử dụng _id mới, sau đó xóa tài liệu cũ.

// 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")})

Đã trả lời ngày 25 tháng 10 năm 2010 lúc 8:41Oct 25, 2010 at 8:41

8

Để làm điều đó cho toàn bộ bộ sưu tập của bạn, bạn cũng có thể sử dụng một vòng lặp (dựa trên ví dụ Niels):

db.status.find().forEach(function(doc){ 
    doc._id=doc.UserId; db.status_new.insert(doc);
});
db.status_new.renameCollection("status", true);

Trong trường hợp này, UserID là ID mới tôi muốn sử dụng

Hướng dẫn how do i change the id field in mongodb? - làm cách nào để thay đổi trường id trong mongodb?

Đã trả lời ngày 5 tháng 6 năm 2013 lúc 23:28Jun 5, 2013 at 23:28

Patrick Wolfpatrick WolfPatrick Wolf

2.5002 huy hiệu vàng28 Huy hiệu bạc27 Huy hiệu đồng2 gold badges28 silver badges27 bronze badges

5

Trong trường hợp, bạn muốn đổi tên _id trong cùng một bộ sưu tập (ví dụ, nếu bạn muốn tiền tố một số _ids):

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

if (doc._id.indexof ("2019:")! = 0) {... cần thiết để ngăn chặn vòng lặp vô hạn, vì foreach chọn các tài liệu được chèn, thậm chí qua phương thức .SnapShot () được sử dụng.

Đã trả lời ngày 10 tháng 3 năm 2018 lúc 15:45Mar 10, 2018 at 15:45

Hướng dẫn how do i change the id field in mongodb? - làm cách nào để thay đổi trường id trong mongodb?

MarkmarkMark

511 Huy hiệu bạc2 Huy hiệu đồng1 silver badge2 bronze badges

1

Ở đây tôi có một giải pháp tránh nhiều yêu cầu, cho các vòng lặp và loại bỏ tài liệu cũ.

Bạn có thể dễ dàng tạo một ý tưởng mới bằng cách sử dụng một cái gì đó như: ____ 11 nhưng biết Mongo sẽ tự động gán _id nếu thiếu, bạn có thể sử dụng tổng hợp để tạo

// 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 chứa tất cả các trường của tài liệu của bạn, nhưng bỏ qua trường _ID. Sau đó bạn có thể lưu nó bằng
// 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")})
3

Vì vậy, nếu tài liệu của bạn là:

{
"_id":ObjectId("5b5ed345cfbce6787588e480"),
"title": "foo",
"description": "bar"
}

Sau đó, truy vấn của bạn sẽ là:

    db.getCollection('myCollection').aggregate([
        {$match:
             {_id: ObjectId("5b5ed345cfbce6787588e480")}
        }        
        {$project:
            {
             title: '$title',
             description: '$description'             
            }     
        },
        {$out: 'myCollection'}
    ])

Đã trả lời ngày 31 tháng 7 năm 2018 lúc 13:23Jul 31, 2018 at 13:23

Hướng dẫn how do i change the id field in mongodb? - làm cách nào để thay đổi trường id trong mongodb?

1

Bạn cũng có thể tạo một tài liệu mới từ Compass MongoDB hoặc sử dụng lệnh và đặt giá trị

// 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")})
4 mà bạn muốn.

Hướng dẫn how do i change the id field in mongodb? - làm cách nào để thay đổi trường id trong mongodb?

D. Schreier

1.6011 Huy hiệu vàng21 Huy hiệu bạc33 Huy hiệu đồng1 gold badge21 silver badges33 bronze badges

Đã trả lời ngày 1 tháng 7 năm 2020 lúc 8:24Jul 1, 2020 at 8:24

Hướng dẫn how do i change the id field in mongodb? - làm cách nào để thay đổi trường id trong mongodb?

Talha Noyontalha NoyonTalha Noyon

6666 Huy hiệu bạc12 Huy hiệu Đồng6 silver badges12 bronze badges

Là một cải tiến rất nhỏ cho các câu trả lời trên, tôi sẽ đề xuất sử dụng

let doc1 = {... doc};

sau đó

db.dyn_user_metricFormulaDefinitions.deleteOne({_id: doc._id});

Bằng cách này, chúng ta không cần phải tạo thêm biến để giữ _id cũ.

Hướng dẫn how do i change the id field in mongodb? - làm cách nào để thay đổi trường id trong mongodb?

Dharman ♦

28.1K21 Huy hiệu vàng75 Huy hiệu bạc127 Huy hiệu đồng21 gold badges75 silver badges127 bronze badges

Đã trả lời ngày 27 tháng 1 lúc 8:19Jan 27 at 8:19

GpurigpuriGPuri

2952 Huy hiệu bạc10 Huy hiệu Đồng2 silver badges10 bronze badges

Ví dụ hơi được sửa đổi của @Florent Arlandis ở trên nơi chúng tôi chèn _ID từ một trường khác trong tài liệu:

 > db.coll.insertOne({ "_id": 1, "item": { "product": { "id": 11 } },   "source": "Good Store" })
 { "acknowledged" : true, "insertedId" : 1 }
 > db.coll.aggregate( [ { $set: { _id : "$item.product.id" }}, { $out: "coll" } ]) // inserting _id you want for the current collection
 > db.coll.find() // check that _id is changed
 { "_id" : 11, "item" : { "product" : { "id" : 11 } }, "source" : "Good Store" }

Không sử dụng Bộ lọc

// 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")})
5

Đã trả lời ngày 7 tháng 6 lúc 20:37Jun 7 at 20:37

Dodododododododo

2.3581 Huy hiệu vàng10 Huy hiệu bạc 30 Huy hiệu Đồng1 gold badge10 silver badges30 bronze badges

Tôi có thể thay đổi ID trong MongoDB không?

Bạn không thể cập nhật nó nhưng bạn có thể lưu một ID mới và xóa ID cũ. but you can save a new id and remove the old id.

Làm cách nào để chỉnh sửa một trường trong MongoDB?

Cập nhật tài liệu cơ bản..
Bước 1) Phát hành lệnh cập nhật ..
Bước 2) Chọn điều kiện bạn muốn sử dụng để quyết định tài liệu nào cần được cập nhật.....
Bước 3) Sử dụng lệnh SET để sửa đổi tên trường ..
Bước 4) Chọn tên trường bạn muốn sửa đổi và nhập giá trị mới cho phù hợp ..
Output:.

Trường ID trong MongoDB là gì?

Trường _ID trong MongoDB, mỗi tài liệu được lưu trữ trong một bộ sưu tập đòi hỏi một trường _ID duy nhất hoạt động như một khóa chính.Nếu một tài liệu được chèn bỏ qua trường _ID, trình điều khiển MongoDB sẽ tự động tạo một ObjectID cho trường _ID.each document stored in a collection requires a unique _id field that acts as a primary key. If an inserted document omits the _id field, the MongoDB driver automatically generates an ObjectId for the _id field.

Tôi có thể sử dụng ID trong MongoDB không?

MongoDB sử dụng ObjectIds làm giá trị mặc định của trường _id của mỗi tài liệu, được tạo trong quá trình tạo bất kỳ tài liệu nào.ID đối tượng được coi là khóa chính trong bất kỳ bộ sưu tập MongoDB nào.Nó là một định danh duy nhất cho mỗi tài liệu hoặc bản ghi., which is generated during the creation of any document. Object ID is treated as the primary key within any MongoDB collection. It is a unique identifier for each document or record.