MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Автоматично изчисляване на полета в mongodb

MongoDB не може да направи това, което искате, с 1 заявка. Но можете да го направите в заявка в две стъпки.

Първо, натиснете новата стойност в масива:

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

}
);

след това актуализирайте "lastDate" само ако е по-малък от последния Pushed.

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

вторият параметър "lastDate" е необходим, за да се избегне състоянието на състезание. По този начин можете да сте сигурни, че вътре в "lastDate" със сигурност има "най-високата избутана дата".

Във връзка с втория проблем, за който питате, можете да следвате подобна стратегия. Актуализирайте {"allAre": false} само ако {"_id":yourID, "items.is":false)} . По принцип се задава "false" само ако някое дете на има стойност "false". Ако не намерите документ с това свойство, не актуализирайте нищо.

// 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. MongoDB получава максимална дата в двойно вложен масив

  2. Услугата MongoDB не работи във Fedora

  3. Как да изпълня заявка за идентификационен масив в Mongoose?

  4. Spring data mongodb премахва свойство от документ с помощта на MongoTemplate

  5. Не може да се стартира/стартира локален mongo db