2011-04-26 60 views
17

我試圖從node.js的/ MongoDB實例「流」數據使用WebSockets的客戶端。這一切都運作良好。確定最後文件從MongoDB中找到()結果集

但如何我確定結果的最後一個文件?我使用node-mongodb-native從node.js中連接到MongoDB的

一個簡單的例子:

collection.find({}, {}, function(err, cursor) { 
    if (err) sys.puts(err.message); 

    cursor.each(function(err, doc) { 
    client.send(doc); 
    });     
}); 
+0

這可能不是以流從DB-e.g文檔的最佳方法。如果文檔插入的速度比以這種方式查詢速度快?請參閱http://docs.mongodb.org/manual/tutorial/create-tailable-cursor/ – 2014-02-03 23:16:53

回答

28

因爲MongoDB的對象ID contatins創建日期,你可以通過ID進行排序,下行,然後使用限制(1):

db.collection.find().sort({ _id : -1 }).limit(1); 

注:我不熟悉node.js在上面的命令是mongo shell命令,我想你可以很容易地將它重寫到node.js.

+1

創建對象的時間不是一秒鐘,因爲ObjectId包含代表**秒**的4字節值自Unix時代起。 – 2013-10-17 11:56:20

+2

@EddieJamsession理論上沒錯,但你有沒有測試過這個? 。 – 2013-10-18 05:37:31

+0

db.collection.find()限制(1)的.sort({_id:-1}); //剛纔我已經測試過..排序應該是最後的方法。 – 2014-09-24 12:45:18

1

說我有收集的公司。下面的代碼片段爲我提供了集合中的最後一個文檔。

db.companies.find({},{「_ id」:1})。skip(db.companies.find()。count() - 1);

代碼不能依賴於_id,因爲如果它是用戶定義的值,它可能不會處於特定模式。

0

使用排序和限制,如果你想使用光標:

var last = null; 
var findCursor = collection.find({}).cursor(); 
findCursor.on("data", function(data) { 
    last = data; 
    ... 
}); 
findCursor.on("end", function(data) { 
    // last result in last 
    .... 
});