我有两种模式的教师和学生
StudentSchema = new mongoose.Schema({
email:{type:String, index: {unique:true}}
name:{type:String},
marks:[{
subject:{type:String,
marks:{type:Number}
}]
})
TeacherSchema = new mongoose.Schema({
email:{type:String, index: {unique:true}}
name:{type:String},
students:[{
email:{type:String},
registerationDate:{type:Date}
}]
})
我有一个API,可以获取老师的电子邮件ID,并且必须使用标记和注册给该老师的学生的姓名作为响应。
为此,我正在使用此代码
var teacher = await Teacher.findOne({"email":req.body.email})
teacher.students.forEach(function(students){
let student = Student.findOne({"email":students.email})
console.log(student) // to watch the result
})
我想在我的学生变量中获取完整的Student模式,以便可以使用学生的数据。
但是我没有得到想要的输出,因为我无法让用户与Student.findOne一起等待。
喜欢
let student = await Student.findOne({"email":students.email})
我得到一个Query对象。
任何人都可以建议在循环中使用await的任何方式,或者以其他任何方式获取我想要的输出?
如果我在循环中的任何地方使用await,节点将崩溃,因此其他地方回答的在循环中使用async / await的解决方案无法解决我的问题。
答案 0 :(得分:1)
注意::没有用于Mongoose查询的本机同步API,但是您可以链接查询。
尝试这个;
df1=sqlContext.sql(
'select id, max(value) over (partition by id) as value from table_view'
)
答案 1 :(得分:0)
代替forEach,您可以使用如下所示的猫鼬查找功能:
teacher.find({}, function (err, teachers) {
// now you can use teachers.forEach here for getting students
console.log(teachers.students)
});
我想你正在努力让所有老师和他们的学生在一起。
答案 2 :(得分:0)
根据我对您问题的理解,这应该有所帮助
Teacher.find({}, (error, allTeachers) => {
if (error) {
// Handle Error
} else {
allTeachers.forEach(teacher=> {
let student = Student.findOne({"email":teacher.email})
});
}
})
答案 3 :(得分:0)
您不能在for .. of
循环中使用await。您必须改用forEach
循环。
一个for .. of
循环触发多个异步请求,但此后函数立即返回。它不会等待for (let students of teacher.students) {
let student = Student.findOne({"email":students.email})
console.log(student) // to watch the result
});
循环时就解决您的诺言。
将代码更改为:
$routeChangeStart