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

Cập nhật MongoDB Collection:khởi tạo tài liệu với các giá trị mặc định

Tôi và các đồng nghiệp của tôi đã tìm ra cách giải quyết. Chúng tôi có thể gọi nó là khởi tạo ba bước .

Hãy nhớ rằng MongoDB đảm bảo tính nguyên tử của các hoạt động trên một tài liệu duy nhất. Với thực tế này, chúng tôi có thể hoạt động theo cách sau:

  1. Cố gắng cập nhật tài liệu, tăng dần các bộ đếm vào một khoảng thời gian xác định. Không thực hiện bất kỳ thao tác nâng cấp nào, chỉ là thao tác cập nhật kiểu cũ. Hãy nhớ rằng việc thực hiện một câu lệnh cập nhật trả về số lượng tài liệu đã được viết. Nếu số lượng tài liệu được viết nhiều hơn 0, bạn đã hoàn tất.
  2. Nếu số lượng tài liệu được ghi bởi bản cập nhật bằng 0, thì điều đó có nghĩa là tài liệu tương đối cần cập nhật chưa có trong bộ sưu tập. Cố gắng chèn toàn bộ tài liệu cho các thẻ được chỉ định. Đặt tất cả các bộ đếm (giá trị trường) về không. Ngoài ra, việc thực hiện một câu lệnh chèn trả về số lượng tài liệu đã được viết. Nếu nó trả về 0 hoặc ném một ngoại lệ, đừng bận tâm:điều đó có nghĩa là một số quy trình khác đã chèn tài liệu cho các thẻ giống nhau.
  3. Thực hiện lại bản cập nhật tương tự ở trên.

Đoạn mã phải trông giống như đoạn mã sau.

// Firt of all, try the update
var result = db.test.update(
  {timestamp_minute: ISODate("2013-10-10T23:06:00.000Z"), type: “memory_used”},
  {$inc: {"values.39": 1}},
  {upsert: false}
);
// If the update do not succeed, then try to insert the document
if (result.nModified === 0) {
  try {
    db.test.insert(/* Put here the whole document */);
  } catch (err) {
    console.log(err);
  }
  // Here we are sure that the document exists.
  // Retry to execute the update statement
  db.test.update(/* Same update as above */);
}

Quy trình trên hoạt động nếu điều kiện tiên quyết là:_id giá trị phải được lấy từ các trường khác trong tài liệu. Trong ví dụ của chúng tôi, _id giá trị sẽ là '2013-10-10T23:06:00.000Z-memory_used . Chỉ sử dụng kỹ thuật này, việc chèn tại điểm 2. sẽ không thành công.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. CẢNH BÁO Lỗi:Mã sao băng phải luôn chạy trong một phương thức gọi Fiber khi trên máy chủ

  2. Chỉ định tham số truy vấn Mongo từ bộ điều khiển máy khách (MEAN.JS)

  3. Cách triển khai MongoDB trên Heroku

  4. Mapreduce trong mongodb

  5. Cách nhập tệp Geojson vào MongoDB