使用mongoose和node.js获取mLab数据库中的文档总数

时间:2018-05-05 17:53:35

标签: node.js mongoose mlab

更新

经过一些测试后,这有效:

Url.count({}, (err, data) => {
    console.log(data); // prints correct number
  });

但这不是:

let len;
Url.count({}, (err, data) => {
  len = data;
});
console.log(len); // prints undefined

有没有办法获取长度数据,然后在后续操作中使用它?

END UPDATE

我是Node和Mongoose的初学者。如何获取数据库集合中的文档总数(称为“Url”)?

我尝试过的一些代码:

1

let len = Url.count();

2

let len = Url.count({});

3

let len = Url.find().count();

4

let len = Url.find().count({});

5

let len = function(done) {
    Url.count({}, (err, data) => {
      if (err) { done(err) }
      else { done(null, data) }
    });
};

我想要找回一个数字,但是当我console.log(len)时,我得到了一个巨大的对象,用于行和行: enter image description here

2 个答案:

答案 0 :(得分:1)

这是因为正在发生的操作顺序。首先发生这种情况

let len;

然后

Url.count({}, (err, data) => {
// Nothing is happening in here yet, still waiting to finish counting
});

然后

console.log(len); // So len IS undefined here. 

最后,一旦完成计数:

len = data;

幸运的是,猫鼬可以在这里帮助你,因为他们支持.then

const numberOfUrls = Url.count({});
numberOfUrls.then(number => {
    // Now you can do whatever you need to do with the number
    console.log('number', number)
});

只是一个重点,

  

Mongoose查询不是承诺。为方便起见,它们有co和async / await的.then()函数。如果您需要完全成熟的承诺,请使用.exec()函数。

http://mongoosejs.com/docs/promises.html

希望有所帮助!

答案 1 :(得分:1)

我也在努力解决这个问题。这里有Javascript异步设计。 volatile甚至在查询完成之前执行回调。

所以,你可以这样做:

Console.log()

或者,在let len; Url.count({}, (err, data) => { len = data; console.log(len); }); 函数中包装整个事物:

async

如果有效,请告诉我。