Javascript 在NodeJS中从MongoDB读取嵌入式文档数据后如何发送响应
我在MongoDB中有一个文档,其中包含对其他两个文档的引用。我有一个getrestapi,它返回的对象还包含引用文档的详细信息。我已经编写了以下代码。代码正在工作,但是由于异步读取特性,我得到的响应是空的Javascript 在NodeJS中从MongoDB读取嵌入式文档数据后如何发送响应,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我在MongoDB中有一个文档,其中包含对其他两个文档的引用。我有一个getrestapi,它返回的对象还包含引用文档的详细信息。我已经编写了以下代码。代码正在工作,但是由于异步读取特性,我得到的响应是空的 router.get("/",function(req,res){ LibraryTransaction.find({},function(err,data){ if(err){ res.send(err.message
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等。我想返回带有书籍名称、用户名和书籍发行日期、书籍到期日期的数据。但作为回应,我得到的只是图书发行日期和到期日期数据,而不是图书名称和用户名。但读取该数据的代码会形成预期文档
有人能帮我理解在Node.js中处理这个问题的正确方法吗?在这种情况下,只需进行快速重构,将所有id映射到一个数组中,并在该数组中找到所有具有_id的书籍,在该查询之后,您就拥有了所有书籍,您可以对它们进行操作。显然,在回拨过程中执行
res.send
或任何您想要的操作
LibraryTransaction.find({},函数(err,data){
如果(错误){
res.send(错误消息);
}
否则{
var交易=[];
var bookIds=data.map(函数(元素){return element.book;});
find({u id:{$in:bookIds}},函数(err,books){
//用书本做任何事,然后发回回复,等等!
});
}
});
Wow,这完全是低效的,永远不要在for语句中进行查询(在本例中)