node.js - 你如何循环一个猫鼬查询?
问题描述
我是一个 java 人,我只是不明白为什么这不起作用。
var results = QuestionEntryService.find( criteria );
while(results.hasNext()) {
result = results.next();
console.log(result);
}
QuestionEntryService.find(criteria) 返回一个 mongoose model.Query 对象。我可以理解结果没有 hasNext() 因为它是一个 mongo 函数而不是 mongoose。我尝试使用回调,但它从未被执行。
更新:如果我 Console.log(results) 它回来了
model.Query {_mongooseOptions: Object, _transforms: Array(0), _hooks: Kareem, _executionCount: 0, mongooseCollection: NativeCollection, …}
解决方案
当你使用 find() 时,它会给你一个结果数组。你尝试使用 mongoose 获取数据的方式也是错误的,所以当你想迭代它时,试试这个
var results = QuestionEntryService.find( {criteria},(err, data)=>{ // this is a callback
for(let iteration of data){
console.log(iteration);
}
});
当您使用回调进行开发时,它最终会将您带到回调地狱问题。所以尝试使用承诺或异步/等待(最佳实践)。所以,
async function findData(){
var results = await QuestionEntryService.find({})exec();
console.log(results); // print out the array of results
return results;
}
}
//consume promise
findData().then((results)=>{
for(let iteration of results){
console.log(iteration);
});
架构
YourSchema = new Schema({
you:{},
me:{}
});
const model = module.exports = mongoose.model("model",YourSchema); // export your compiled mode
l
然后从您的路由器访问它
const model = require("./model"); // your file system
model.find({you:"name"},callback);
推荐阅读
- ansible - Ansible Playbook - 无法在一次播放中在任务之间传递变量
- html - 仅当元素上不存在类时才应用某些 CSS 样式
- php - 会话登录成功后如何插入表
- python-3.x - 如何同时为多个人物设置动画
- r - R 创建不同的数字序列
- python - Python Google Drive API - 下载重复文件
- javascript - Javascript:构建 AudioContext 时忽略采样率
- node.js - 为什么两个变量之一未定义?
- javascript - Django/Ajax/Javasdript JSON.parse 将字符串转换为 JavaScript 对象
- php - 优化多维数组创建