首页 > 解决方案 > 你如何循环一个猫鼬查询?

问题描述

我是一个 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, …}

标签: node.jsmongoose

解决方案


当你使用 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);

推荐阅读