如何在Mongoose中修改结果查询,而不影响实际文档?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Mongoose中修改结果查询,而不影响实际文档?相关的知识,希望对你有一定的参考价值。
状态(截至5/4/2020):未解决。我尝试做lean()并且document.count现在可以吸收值,但是无法推送到接收变量。
尽管我们正在经历全球危机,我希望一切都很好。我目前正在做一个学校的网络项目,需要呈现分配给我的特定功能。我正在Express中使用Mongoose,并使用了模板进行处理。请参阅下面的随附的模型架构和说明。
collegeModel-集合A
var collegeSchema = new Schema({
shortName: {type: String}, //value that I intend to synchronously query its occurrence with Collection B
longName: {type: String},
logo: {type: String},
contactUs:{
telNum: {type: String},
faxNum: {type: String},
email: {type: String}
},
aboutUs: {type: Array},
visionMission: {type: String},
coreValues: {type: String},
goals: {type: String},
founderBio: {type: String},
philosophy: {type: String},
icon: {type: String}
});
professorModel-集合B
var professorSchema = new Schema({
profNumber: {type: Int32},
college: {type: String}, //value to be compared with shortName
gender: {type: String},
profName: {type: String},
profCourse: {type: String}
});
伪代码-所需的逻辑要实现
app.get('/testCount', function(req,res) {
collegeModel.find({}).lean().exec(function(err,collegeRes){
var collegeObject = [];
collegeRes.forEach(function(document){
professorModel.countDocuments({college:document.shortName}, function(err2,professorCount){
document.count = professorCount;
collegeObject.push(document); //doing a console.log(collegeObject) would return empty objects [].
});
});
});
});
我不知道我在做什么错,我知道document.count存在,因为每次我执行console.log(document.count)时它都会返回一个值,但是当按下它时它将变成[]。希望你能帮助我实现我的目标。谢谢!
您的查询以异步方式解析,您必须找到一种方法来等待所有查询完成,以确保您拥有所需的所有数据。
解决此问题的一种方法是使用async/await
(Node.js> = 7.6.0)
async/await
使用app.get('/testCount', async function(req, res) { // note the async keyword
const collegeRes = await collegeModel.find({}).lean().exec() // .exec() returns a Promise, so you can `await` it.
const resultPromises = collegeRes.map(async college => { // arrow function is equivalent to function in this context
const professorCount = await professorModel.countDocuments({ college: college.shortName })
college.count = professorCount
return college
})
const collegeObject = await Promise.all(resultPromises)
console.log(collegeObject)
})
中的Promise.map
更具可读性,或者您也可以使用其他Promise实用程序库
Promise.map
以上是关于如何在Mongoose中修改结果查询,而不影响实际文档?的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose 回调函数如何知道第二个参数是啥 db.query 结果?