更新
经过一些测试后,这有效:
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) }
});
};
答案 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
如果有效,请告诉我。