Подсчет документов с заданной проблемой значения поля - PullRequest
0 голосов
/ 02 мая 2019

У меня есть одна проблема относительно возвращаемого значения функции подсчета db.collection.find.count();а именно моя программа должна возвращать целочисленное значение (количество документов в db.collection по определенным критериям), но функция возвращает Promise, который я не знаю, как использовать в функции обратного вызова.

Я пытался сделать обратный вызовФункция внутри count(), как и count(function(err,res){ if(err) console.log('Error') else count1=res;}), но не работает.Я также искал документацию по stackoverflow и mongodb и пробовал некоторые другие решения, но это также не помогло.(но когда я попробовал db.collection('blogCollection').find("author":"user123").count() в robomongo, он правильно запустился и вывел результат запроса)

Это мой код var count1=database.collection("blogCollection").find({"author":id}).count();

, где count1 должно быть количеством документов, гдеПоле author равно значению id.Заранее благодарю за помощь. :) У меня mongodb версии 3.2, а узел v10.15.3.

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

в вашем коде должно быть несколько обратных вызовов, а не только в конце

см. Этот обратный вызов при операции MongoDB с Node.js

, а также функция подсчета для драйвера узла не нуждается в работе с курсором http://mongodb.github.io/node-mongodb-native/3.2/api/Collection.html#count

так что ваш код должен действительно выглядеть как

database.collection("blogCollection", (err, col) => {
    col.count(query,opt,  (err,count )=> count1 = count)
)

с асинхронным ожиданием

const col = await database.collection("blogColelction")
const count1 = await col.count(query, opt)
0 голосов
/ 03 мая 2019

Обещания и обратные вызовы имеют разные синтаксисы.Вы можете проверить, как Promise работает здесь .Вы также можете проверить разницу с обратными вызовами здесь .

В вашем случае вы можете использовать Promise как здесь:

database.collection("blogCollection").find({"author":id}).count()
  .then((count1) => {
    console.log(count1);
});

Вы также можетевыберите ES6 Async / Await :

async function count() {
  const count1 = await database.collection("blogCollection").find({"author":id}).count();
  console.log(count1);
}

Обратите внимание на async перед function и await перед вызовом функции базы данных.

...