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

Групирайте Mongo документи по id и вземете най-новия документ по времево клеймо

Ако правите агрегиране, трябва да направите подобно на SQL, което означава да посочите операцията за агрегиране за колона, единствената опция, която имате, е да използвате $$ROOT оператор

db.test.aggregate(
   [
    { $sort: { timestamp: 1 } },
     {
       $group:
         {
           _id: "$fooId",
           timestamp: { $last: "$$ROOT" }
         }
     }
   ]
);

Но това ще промени малко резултата

{ "_id" : "1", "timestamp" : { "_id" : ObjectId("570e6be3e81c8b195818e7fa"), 
  "fooId" : "1", "status" : "A", "timestamp" :ISODate("2016-01-01T00:00:00Z"), 
  "otherInfo" : "BAR" } }

Ако искате да върнете оригиналния формат на документа, вероятно ще ви е необходим етап $project след това



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. автоматично нарастване на идентификаторите в mongoose

  2. Използване на агрегат за комбиниране на списък от всички поддокументи, които отговарят на заявката?

  3. Защо документите на MongoDB препоръчват да не използвате DBREF?

  4. как да актуализирате вложен обект на mongoose документ само за предоставени ключове

  5. Как мога да сортирам, че нулите са последно подредени в mongodb?