2014-09-30 45 views
0

假設一個具有下列文件集:如何獲取MongoDB中最新的文檔?

{ 
    _id:  0, 
    data:  'foo', 
    createdAt: Tue Sep 30 2014 17:00:00 GMT-0300 (BRT) 
} 

{ 
    _id:  1, 
    data:  'foo', 
    createdAt: Tue Sep 30 2014 18:00:00 GMT-0300 (BRT) 
} 

{ 
    _id:  2, 
    data:  'foo', 
    createdAt: Tue Sep 30 2014 18:00:00 GMT-0300 (BRT) 
} 

{ 
    _id:  3, 
    data:  'bar', 
    createdAt: Tue Sep 30 2014 18:00:00 GMT-0300 (BRT) 
} 

我怎樣才能盡在「一次操作」最近{data: 'foo'}文件?在這種情況下,帶有_id12的文檔。

我不知道有多少元素,所以我不能做:

db.coll.find({data: 'foo', createdAt: ???}) 

或:

db.coll.find({data: 'foo'}).sort({createdAt: -1}).limit(???); 

我知道的唯一方法有兩個步驟:

var d = db.coll.find({data: 'foo'}).sort({createdAt: -1}).next(); 
var c = db.coll.find({data: 'foo', createdAt: d.createdAt}); 

有一種方法可以在一個單一的步驟中做到這一點?

相關問題:[1]

回答

0

假設所有你關心的是ID和時間,也不需要看到每個返回的文檔的整個文檔,你可以使用Aggregation Framework.

下面是一個未經測試的例子將返回最近的時間戳以及與之相關的所有_id值。

db.coll.aggregate({$match: {data: 'foo'}}, {$group: {_id: '$created_at', id: {$addToSet: '$_id'}}}, {$sort: {_id: -1}}, {$limit: 1}) 
+0

對於這樣的日期格式,我真的懷疑這會起作用。會做一些研究。 – 2014-10-01 04:54:52

+0

當然會的。你不喜歡它什麼?只要這些元素可以被看作是平等的,這個小組就會工作。排序取決於它是否存儲爲時間戳或字符串。我假設它有一個時間戳,因爲沒有引號,他已經顯示了在他的例子中排序的能力。 – Verran 2014-10-01 16:11:05