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

Cập nhật trường chấm Mongodb

Tất nhiên nó làm được vì đây chính xác là những gì bạn đang yêu cầu nó làm. Bất chấp tiêu đề của bạn, không được sử dụng "ký hiệu dấu chấm" ở đây chút nào. Tất nhiên đây là những gì bạn muốn làm nếu bạn có ý định không ghi đè các thuộc tính hiện có. Ngay bây giờ, bạn chỉ đang thay thế toàn bộ đối tượng, mặc dù bạn đang sử dụng $set nơi trừ khi bạn thay đổi cấu trúc ở đây về cơ bản là thừa.

Để "khắc phục" điều này, bạn cần thao tác data của mình đối tượng đầu tiên. Với một cái gì đó dọc theo những dòng sau:

var newobj = {};
Object.keys( data ).forEach(function(key) {
    if ( typeof(data[key]) == "object" ) {
       Object.keys( data[key] ).forEach(function(subkey) {
           newobj[key + "." + subkey] = data[key][subkey];
       });
    } else {
       newobj[key] = data[key];
    }
});

Điều đó cung cấp cho bạn và đầu ra trong newobj cấu trúc như thế này:

{
    "postcode" : "BV123456789BY",
    "status.last_check" : 1413539153572,
    "status.code" : "06",
    "status.postnum" : "247431",
    "status.date" : ISODate("2014-10-17T11:28:20.540Z"),
    "status.text" : "06. Поступило в участок обработки почты (247431) Светлогорск - 1"
}

Sau đó, tất nhiên, bạn có thể tiếp tục cập nhật bình thường của mình và làm mọi thứ ổn:

Order.update({ "postcode": newobj.postcode}, { "$set": newobj }, function (err) {
    if (err) console.log(err);
});

Tất nhiên bạn sẽ cần một số đệ quy cho một cấu trúc lồng nhau hơn, nhưng điều này sẽ cung cấp cho bạn ý tưởng chung. Ký hiệu dấu chấm là một cách để thực hiện, nhưng bạn cần thực sự sử dụng nó.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách upert với mongodb-java-driver

  2. Tài liệu ngẫu nhiên từ MongoDB sử dụng dữ liệu mùa xuân

  3. Làm cách nào để tạo nguồn cấp dữ liệu tệp từ những người mà người dùng đang theo dõi?

  4. Apache Drill - Thời gian bắt đầu đầu tiên cao

  5. Đẩy phần tử vào mảng trong mongoose