2015-11-23 2 views
1

Это, должно быть, глупый вопрос, но я достаточно долго ударил головой о стену..findOne не передает результаты обратного вызова

Краткая версия: У меня есть запрос, который возвращает результат, как ожидалось, в консоли Mongo, но не возвращает никаких результатов (или ошибок) при использовании через пакет Mongo NodeJS.

var weatherCacheQuery = { 
    'location': { 
     '$near': { 
      '$geometry': { 
       type: 'Point', 
       coordinates: [location.coordinates[0], location.coordinates[1]] 
      }, 
      '$maxDistance': 50000 
     } 
    }, 
    'retrieved': { 
     '$gte': moment().subtract(2, 'hours').toDate() 
    } 
}; 
this.db.collection('weather').findOne(
    weatherCacheQuery, 
    function(err, doc) { 
     console.log(JSON.stringify(err)); 
     console.log(JSON.stringify(doc)); 
    } 
}); 

Как вы можете видеть, ничего слишком сложного.

Если я сбрасываю объект запроса и вставляю его в запрос findOne в консоли Mongo, он возвращает единственный результат, который выглядит точно так, как должен. Однако в JS два файла console.log() возвращают значение null.

Немного более странно, find() с тем же запросом делает возвращает результат, но не тот, который я могу просмотреть, потому что JSON.stringify() жалуется на то, что он является круговым.

Может кто-нибудь указать на абсурдную вещь, без сомнения, что я делаю не так?

+0

Вы используете Node MongoDB драйвер 2.0? –

+0

Получаете ли вы какой-либо вывод, если вы задаете 'weatherCacheQuery = {}'? – Jaco

+0

@ExplosionPills - package.json показывает^2.0.45. – user1381745

ответ

1

.findOne для узла MongoDB драйвер принимает три аргумента, и ни один из них не является необязательным. Попробуйте:

this.db.collection('weather').findOne(
    weatherCacheQuery, {}, 
    function(err, doc) { 
     console.log(JSON.stringify(err)); 
     console.log(JSON.stringify(doc)); 
    } 
}); 

Вы также можете попробовать его с обещанием, цепи .then к .findOne и передать функцию обратного вызова к этому.

В документах также указано, что .findOne устарел и используется.

find().limit(1).next 

Вы можете передать обратный вызов на это.

+0

find(). Limit (1) .nextработал, спасибо! – user1381745

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