MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Automatyczne obliczanie pól w mongodb

MongoDB nie może wykonać tego, o co prosisz, za pomocą 1 zapytania.Ale możesz to zrobić w zapytaniu dwuetapowym.

Przede wszystkim wstaw nową wartość do tablicy:

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

}
);

następnie zaktualizuj "lastDate" tylko wtedy, gdy jest mniejsza niż ostatnia data wypchnięcia.

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

drugi parametr „lastDate” jest potrzebny w celu uniknięcia wyścigu. W ten sposób możesz być pewien, że w „lastDate” na pewno znajduje się „najwyższa data popchnięcia”.

W związku z drugim problemem, o który prosisz, możesz zastosować podobną strategię. Zaktualizuj {"allAre": false} tylko jeśli {"_id":yourID, "items.is":false)} . Zasadniczo ustaw "false" tylko wtedy, gdy jakieś dziecko ma wartość "false". Jeśli nie znalazłeś dokumentu z tą właściwością, nie aktualizuj niczego.

// 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. Spraw, aby połączenie dwóch pól było wyjątkowe w mojej kolekcji

  2. MongoDB filtruje zawartość tablicy obiektów na podstawie członka obiektu

  3. Jak ustawić MongoDB Change Stream "OperationType" w sterowniku C#?

  4. Jak zaimplementować tę operację zapytania i aktualizacji mongodb (sterownik CSharp)?

  5. MongoDB:mongorestore:nie znaleziono polecenia