2015-03-13 102 views
0

我很難找到最後插入到mongo中的元素。我正在使用我發現的示例代碼,並嘗試進行查詢並顯示該項目,但出現錯誤。我知道我想要做這樣的事情。節點js mongo查找最後插入

db.collectionName.findOne({}, {sort:{$natural:-1}}) 

但是,這是我迄今爲止,它不工作。

var MongoClient = require('mongodb').MongoClient; 

MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) { 
    if(err) { return console.dir(err); } 

    var collection = db.collection('test'); 
    var doc1 = {'hello':'doc1'}; 
    var doc2 = {'hello':'doc2'}; 
    var lotsOfDocs = [{'hello':'doc3'}, {'hello':'doc4'}]; 

    collection.insert(doc1); 
    collection.insert(doc2, {w:1}, function(err, result) {}); 
    collection.insert(lotsOfDocs, {w:1}, function(err, result) {}); 

    collection.find({}).toArray(function(err, docs) { 
    console.log(docs[0]); 
    }); 

    db.close(); 
}); 

這是錯誤。

nodejs/node_modules/mongodb/lib/mongodb/connection/base.js:246 
     throw message; 
      ^
TypeError: Cannot read property '0' of null 

我檢查,以確保數據庫不是空的,所以我不知道爲什麼它返回null。

+0

什麼是錯用'$的[**相反的順序**](http://docs.mongodb.org/manual/reference/operator/meta/natural/#reverse-order)自然「運算符:'collection.find({})。sort({$ natural:-1})toArray(..)'或簡單地'collection.find()。sort({$ natural:-1})。limit (1)'爲了插入最後一個文件? – chridam 2015-03-13 09:43:18

+0

我真的不能測試,因爲我無法獲得'collection.find({})。toArray(function(err,docs){ console.log(docs [0]); });'工作此刻 – 2015-03-13 09:45:34

+0

任何想法有什麼不對?我有問題查詢任何試圖console.log它在此刻 – 2015-03-13 09:47:00

回答

3

我發現了一個可能的解決方案(here)到您的問題。這可能是由於數據庫連接在您發出的操作完成之前關閉的事實。

您可以通過在find查詢中包含db.close()調用來修復它。

collection.find({}).toArray(function(err, docs) { 
    console.log(docs[0]); 
    db.close(); 
    }); 
+0

工作,謝謝! – 2015-03-13 10:26:43