MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB đổi tên trường cơ sở dữ liệu trong mảng

Đối với những gì nó đáng giá, mặc dù nghe có vẻ khủng khiếp khi phải làm, nhưng giải pháp thực sự khá dễ dàng. Điều này tất nhiên phụ thuộc vào số lượng hồ sơ bạn có. Nhưng đây là ví dụ của tôi:

db.Setting.find({ 'Value.Tiers.0.AssetsUnderManagement': { $exists: 1 } }).snapshot().forEach(function(item)
{    
    for(i = 0; i != item.Value.Tiers.length; ++i)
    {
        item.Value.Tiers[i].Aum = item.Value.Tiers[i].AssetsUnderManagement;
        delete item.Value.Tiers[i].AssetsUnderManagement;
    }
    
    db.Setting.update({_id: item._id}, item);
});

Tôi lặp lại bộ sưu tập của mình nơi tìm thấy mảng và tìm thấy tên "sai". Sau đó, tôi lặp lại bộ sưu tập phụ, đặt giá trị mới, xóa giá trị cũ và cập nhật toàn bộ tài liệu. Nó tương đối không đau. Cứ cho là tôi chỉ có vài chục nghìn hàng để tìm kiếm, trong đó chỉ có vài chục hàng đáp ứng tiêu chí.

Tuy nhiên, tôi hy vọng câu trả lời này sẽ giúp ích cho ai đó!

Chỉnh sửa:Đã thêm snapshot() cho truy vấn. Xem lý do tại sao trong phần bình luận.

Bạn phải áp dụng snapshot() vào con trỏ trước khi truy xuất bất kỳ tài liệu nào từ cơ sở dữ liệu. Bạn chỉ có thể sử dụng snapshot() với các bộ sưu tập chưa được lưu trữ.

Từ MongoDB 3.4, snapshot() chức năng đã bị loại bỏ. Vì vậy, nếu sử dụng Mongo 3.4+, ví dụ trên sẽ xóa snapshot() chức năng.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tạo đối tượng BSON từ chuỗi JSON

  2. MongoDB 2.6 Cải tiến khung tổng hợp

  3. Nhận tên của tất cả các khóa trong bộ sưu tập

  4. Làm thế nào để sử dụng tính năng chèn hàng loạt không có thứ tự với Mongoskin?

  5. Mongodb:Toán tử $ in so với rất nhiều truy vấn đơn lẻ