我在MongoDB中有一个文档,它包含对其他两个文档的引用。我有get rest API,它还返回带有引用文档详细信息的对象。我写了吹响代码。代码正在运行,但是由于异步读取功能,我得到的响应是空的.router.get(“/”,function(req,res){
LibraryTransaction.find({},function(err,data){
if(err){
res.send(err.message);
}
else{
var transactions=[];
data.forEach(function(element){
debugger;
var transaction ={};
var BookName='';
var ISBNNumber='';
var UserName='';
Book.findOne({_id:element.book},function(err,book){
debugger;
if(!book){
res.send("Book not found please check ISBN number.");
}
else{
BookName = book.name;
ISBNNumber= book.isbnNumber;
User.findOne({_id:element.user},function(err,user){
debugger;
if(!user){
res.send("User not found.");
}
else
{
UserName=user.userName;
transaction.bookName=BookName;
transaction.iSBNNumber=ISBNNumber;
transaction.userName=user.userName;
transaction.IssueDate=element.issueDate;
transaction.DueDate=element.dueDate;
transaction.TransactionType=element.transactionType;
console.log(BookName);;
transactions.push(transaction);
}
});
}
});
});
console.log("Send");
res.send(transactions);
}
});
}); `
我有一份交易文件,其中包含书籍和用户文档以及bookIssueDate,DueDate等其他一些细节。我想返回包含书名,用户名和书籍发行日期,预订截止日期的数据。但作为回应,我只获得了Book发布日期和Due dtae数据,但没有获得图书名称和用户名。但是读取该数据的代码形成了resoective文档。
有人可以帮我理解在Node.js中处理这个问题的正确方法吗?
答案 0 :(得分:0)
在这种情况下,只需一个快速重构,将所有ID映射到一个数组中,然后在该数组中找到所有带有_id的书籍,在该查询之后您拥有所有书籍并且可以操纵它们。显然,在回叫中做res.send
或任何你想做的事。
LibraryTransaction.find({},function(err,data){
if(err){
res.send(err.message);
}
else{
var transactions=[];
var bookIds = data.map(function(element) { return element.book; });
Book.find({ _id: { $in: bookIds }}, function(err, books) {
// Do whatever with books and send back the response, with res.. blah!
});
}
});