我在这里有一个小问题,可以动态检索文档并更新它们。 我有两个文件之间的多对多关系:带有用户标识的房子和我的用户集合。 我想要做的是:将使用idUser找到的用户文档从House文档保存到House文档
我的房子文件如下:
House:
{
"id": 1
"idUser": 3
}
和我的用户文档:
{
"id": 3
"name" : Test
"lastname": TEST
}
我希望得到以下结果:
行:
{
"id":1
"idUser":3
"user": { "name": Test, "lastname": TEST } // document fetched from the House's idUser
以下是我的代码示例:
house.find().done(function(err,h){
for(var i = 0 ; i < h.length ; i++){
User.findOne({ id: h.idUser}).done(function(err,user){
h[i].user = user; // issue here is that the variable 'i' is not defined anymore after it enters in the "done" function
}
console.log(h);
}
});
感谢任何有线索的人。 最好的问候,
答案 0 :(得分:1)
您的问题是for-loop中的异步函数调用。这不起作用,因为当第一次调用回调时,循环完成并且i
等于h.length
。
你必须这样做:
house.find().done( function( err, h ) {
function processHouse( i, callback ) {
if( i < h.length ) {
console.log( "House: " + i );
User.findOne({ id: h.idUser}).done( function( err, user ){
h[i].user = user; // issue here is that the variable 'i' is not defined anymore after it enters in the "done" function
processHouse( i+1, callback );
});
} else {
callback()
}
}
processHouse( 0, function() {
console.log( "Done!" );
});
});
我建议你研究这个link。