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

Tự động tính toán các trường trong mongodb

MongoDB không thể thực hiện những gì bạn đang yêu cầu với 1 truy vấn, nhưng bạn có thể thực hiện nó trong truy vấn hai bước.

Trước hết, hãy đẩy giá trị mới vào mảng:

db.Test3.findOneAndUpdate(
{_id: ObjectId("58047d0cd63cf401292fe0ad")},
{$push: {"items":  {"date": ISODate("2013-01-27T16:38:16.163+0000")}}},
{returnNewDocument: true},
function (err, result) {

}
);

sau đó cập nhật "lastDate" chỉ khi nhỏ hơn ngày cuối cùng được đẩy.

  db.Test3.findOneAndUpdate (
   {_id: ObjectId("58047d0cd63cf401292fe0ad"), "lastDate":{$lt: ISODate("2013-01-25T16:38:16.163+0000")}},
   {$set: {"lastDate": ISODate("2013-01-25T16:38:16.163+0000")}},
   {returnNewDocument: true},
   function (err, result) {
   }
  ); 

tham số thứ hai "lastDate" là cần thiết để tránh tình trạng chủng tộc. Bằng cách này, bạn có thể chắc chắn rằng bên trong "Ngày cuối cùng" chắc chắn có "ngày cao nhất được đẩy".

Liên quan đến vấn đề thứ hai bạn đang yêu cầu, bạn có thể làm theo một chiến lược tương tự. Cập nhật {"allAre": false} chỉ khi {"_id":yourID, "items.is":false)} . Về cơ bản chỉ đặt "false" nếu một số con của có giá trị 'false'. Nếu bạn không tìm thấy tài liệu có thuộc tính này thì đừng cập nhật gì cả.

// add a new Child to false
db.Test4.findOneAndUpdate(
{_id: ObjectId("5804813ed63cf401292fe0b0")},
{$push: {"items":  {"is": false}}},
{returnNewDocument: true},
 function (err, result) {

}
);

// update allAre to false if some child is false
db.Test4.findOneAndUpdate (
   {_id: ObjectId("5804813ed63cf401292fe0b0"), "items.is": false},
   {$set: {"allAre": false}},
   {returnNewDocument: true},
   function (err, result) {
   }
  ); 



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. arrayFilters trong mongodb

  2. Mongoose tổng hợp trả về kết quả trống

  3. Nâng cấp hàng loạt với trình điều khiển MongoDB Java 3.0

  4. Hợp nhất tài liệu với các mảng lồng nhau của nó và các mảng lồng nhau của chúng

  5. Xây dựng Newsfeed giống Facebook được cá nhân hóa:SQL, MongoDB?