【发布时间】:2019-04-05 15:51:53
【问题描述】:
我有一个 Student.find 查询,它在 Room.find 查询中运行,如下所示:
Room.find({ schoolID: mongoose.mongo.ObjectId(user.schoolID) }).sort({'level':'ascending','name':'ascending'}).then(function (roomList) {
if (!roomList){
console.log("no class room found")
}else{
console.log("class room found: " + roomList.length)
var studentList = []
for (var i = 0; i < roomList.length; i++){
console.log(i)
console.log("class room id: " + roomList[i]._id)
console.log("class room name: " + roomList[i].name)
Students.find({ schoolID: mongoose.mongo.ObjectId(user.schoolID), classRoomID: mongoose.mongo.ObjectId(roomList[i]._id) }).sort({'firstName':'ascending'}).then(function (data) {
if (!data){
console.log("no data found")
return res.status(200).send({success: true, msg: 'No data found.'});
}else{
console.log("214 ada data: " + data.length)
studentList[i] = data
console.log("studentList " + i)
console.log(studentList[i])
}
});
}
res.json({success: true, token: 'JWT ' + token, id: user._id, user: user, classRoom: roomList, students: studentList});
}
});
在数据库中,有 6 个教室,每个班级的学生人数不同。在 console.log 中,我期待看到类似的内容:
class room id: 01
class room name: my first class
studentList 0:
list of students from first class
class room id: 02
class room name: my second class
studentList 1:
list of students from 2nd class
class room id: 03
class room name: my third class
studentList 2:
list of students from 3rd class
因为我假设 Student.find 将在我输出 console.log("class room name: + roomList[i].name) 后立即执行
但原来所有的console.log("class room id") 和console.log("class room name") 都是先打印出来的,然后好像只有Students.find 被执行了,因为我的输出是什么像这样:
class room id: 01
class room name: my first class
class room id: 02
class room name: my second class
class room id: 03
class room name: my third class
class room id: 04
class room name: my fourth class
class room id: 05
class room name: my fifth class
class room id: 06
class room name: my six class
list of students
list of students
list of students
list of students
list of students
list of students
如果是这种情况,我该如何进行正确的嵌套查询?
【问题讨论】: