[英]Multiple queries in NodeJS and MongoDB
我有一個NodeJS/Express/MongoDB
應用程序。 對於我的一個端點,我正在嘗試從數據庫中獲取一些統計信息,但我在使用 Promise 時遇到了麻煩。
我知道db不會在不同的.thens
之間移動,但無論我如何重新安排代碼,除了第一個用戶數之外,我無法從console.log()
中得到任何東西。 我還嘗試將 db 保存到在 function 開頭聲明的變量中,但這也無濟於事。
以承諾的方式對MongoDB進行多次查詢的正確方法是什么?
節點代碼:
function getStats(num){
var stats = "";
MongoClient.connect(`${mongoString}/SiteUsers`)
.then(db => {
db.db().collection("Users").find({}).count()
.then( userCount => {
stats += `Users: ${userCount}\n`
return db;
})
.then( adminCount => {
db.db().collection("Users").find({admin:true}).count()
.then( adminCount => {
stats += `Admins: ${adminCount}\n`
})
})
.then( data => {
console.log(`Stats are now: \n${stats}`);
})
})
.catch(err => {
if(err) console.log(err);
});
}
謝謝!
有幾種方法可以處理你的 Promise 的順序。 其中之一是使用異步/等待功能。
async function getStats(num){
try {
const conn = await MongoClient.connect(`${mongoString}/SiteUsers`)
const userCount = await conn.db().collection("Users").find({}).count()
const adminCount = await conn.db().collection("Users").find({admin:true}).count()
console.log(`User count: ${userCount}\nAdmin count: ${adminCount}`)
} catch (err) {
console.log(err)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.