Вопрос по node.js, mongodb – MongoDB Node найти, как справиться без результатов?

37

Я использую нпмmongodb Водитель с узлом.

я имею

<code>collection.findOne({query}, function(err, result) {
    //do something
}
</code>

Проблема в том, что у меня нет результатов,err все ещеnull нахожу ли я результат или нет. Как я узнаю, что по запросу не найдено результатов?

Я также пытался

<code>info = collection.findOne(....
</code>

Ноinfo простоundefined (это выглядело асинхронно, так что я все равно не думал, что это был путь ...)

Ваш Ответ

6   ответов
4

Просто как:

collection.findOne({query}, function(err, result) {
    if (!result) {
        // Resolve your query here
    }
}
65

Отсутствие каких-либо записей не является ошибочным условием, поэтому вы должны искать отсутствие значения вresult, Поскольку любые подходящие документы всегда будут "правдивыми", вы можете просто использовать простойif (result) проверять. Например.,

collection.findOne({query}, function(err, result) {
    if (err) { /* handle err */ }

    if (result) {
        // we have a result
    } else {
        // we don't
    }
}
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

Если результат равен нулю, mongo не может найти документ, соответствующий вашему запросу. Пробовали запрос из оболочки монго?

-8
collection.findOne({query}, function(err, result) {
   if (err) { /* handle err */ }

   if (result.length === 0) {
    // we don't have result
   }
}
Error: User Rate Limit Exceeded
resultError: User Rate Limit ExceededlengthError: User Rate Limit Exceeded
0

в наше время - сузел 8 - вы можете сделать это внутриasync функция:

async function func() {
  try {
    const result = await db.collection('xxx').findOne({query});
    if (!result) {
      // no result
    } else {
      // do something with result
    }
  } catch (err) {
    // error occured
  }
}
10

Все эти ответы ниже устарели. findOne этоосуждается, Документация Lastest 2.1 предлагает использовать

find(query).limit(1).next(function(err, doc){
   // handle data
})
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceedednull.
Error: User Rate Limit Exceededdoc?
find().limit()Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededfindOne()Error: User Rate Limit Exceeded

Похожие вопросы