从查询中的查询访问MongoDB值
Accessing a MongoDB value from a query within a query
为什么在第二个查询中会导致该字段未定义?这是代码:
Survey.findById(req.params.id, function(err, survey) {
for ( var i=0; i<=survey.businesses.length-1; i++ ) {
console.log(survey.businesses[i].votes); // This returns the expected value
UserSurvey.find({ surveyId: req.params.id, selections: survey.businesses[i].id }, function(err, usurvey) {
console.log(survey.businesses[i].votes); // businesses[i] is undefined
});
}
});
您的方法存在几个问题。我建议做这样的事情:
Survey.findById(req.params.id, function(err, survey) {
for ( var i=0; i<=survey.businesses.length-1; i++ ) {
(function(business) {
console.log(business); // This returns the expected value
UserSurvey.find({ surveyId: req.params.id, selections: business.id }, function(err, usurvey) {
console.log(business.votes); // businesses[i] is undefined
});
})(survey.businesses[i]);
}
});
当您使用带有异步代码和闭包的循环时,在运行异步代码之前,闭包可能是高级的(i的值更改)。这意味着您可能访问了错误的元素,或者完全访问了无效的元素。将异步函数封装在一个自关闭函数中可以确保被封装的函数使用正确的项。
相关文章:
- 如何处理node.js节点mongodb中的连接和查询队列
- Mongodb数千个并行运行的查询
- 使用MEAN堆栈-查询MongoDB并将值作为变量传递
- MongoDB嵌套对象数组后查询
- 如何在mongodb中进行查询
- MongoDB collection.find()查询挂起
- 检查 mongodb 中是否存在项目(多个查询)
- 需要呈现MongoDB查询返回结果的特定索引/位置
- 使用计算值查询MongoDB
- 查询Mongodb时混合使用field和js函数
- 这是查询MongoDB的最佳结构吗?
- 查询MongoDB中不存在的字段
- 查询 MongoDB 删除触发器
- 我可以按日期查询MongoDB ObjectId吗?
- 使用nodejs查询MongoDb
- 如何在查询mongodb时将字符串值替换为斜杠
- 使用meteor查询mongodb集合中的子对象属性
- 查询mongodb中nodejs应用的总用户数
- 使用Express查询MongoDB服务器(Node.js项目)
- 在js中查询mongodb并将结果设置为变量