2015-03-13 2 views
0

Мне сложно найти последний вставленный элемент в монго. Я использую пример кода, который я нашел, и пытаюсь сделать запрос и отобразить элемент, но я получаю сообщение об ошибке. Я понимаю, что я должен сделать что-то подобное.узел 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

+0

Я не могу это проверить, потому что я не могу получить 'collection.find ({}). ToArray (function (err, docs) { console.log (docs [0]); });' работать на данный момент –

+0

любая идея, что не так с этим? У меня возникают проблемы с запросом на что-либо, пытающееся console.log на данный момент –

ответ

3

Я нашел возможное решение (here) к вашей проблеме. Возможно, это связано с тем, что соединение с базой данных закрывается перед завершенными операциями.

Вы можете исправить это, включив вызов db.close() внутри запроса find.

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

работал, спасибо! –

Смежные вопросы