2017-02-07 7 views
1

에 원래 쿼리 오브젝트를 취득 나는 위의 콜백 함수에있는 쿼리의 어떤 결과를 알 필요가 몽구스

"use strict"; 

var Mongoose = require("mongoose"); 
var User  = Mongoose.model("User"); 
var Cache = {}; 

for (var index=0; index<usernames.length; index++) { 
    var query = { 
     username:usernames[index] 
    }; 

    User.find(query). 
    exec(function(error,users){ 
     //THIS IS A CALLBACK FUNCTION, 
     //HOW TO GET THE 'query' VARIABLE ABOVE? 
     //I WANT TO PUT THE RESULT INTO CACHE: 
     var username = users[0].username; 
     Cache[username] = users[0]; 
    }); 
} 

몽구스

를 통해 여러 쿼리를 수행하는 루프를 가지고있다. db 쿼리 캐싱 목적입니다. 'users [0]'에서 'username'을 추출 할 수 있지만 'users'배열이 비어 있으면 아무 것도 없습니다.

답변

1

루프 안에 익명 함수를 넣으십시오. 첫 번째 사용자에만 관심이 있거나 username 값이 고유 한 경우 .find() 대신 .findOne()을 사용하십시오.

for (var index = 0; index < usernames.length; index++) { 
    (function() { 
     var query = { 
      username: usernames[index] 
     }; 

     User.findOne(query). 
      exec(function (error, user) { 
       //use your query here 
       var username = user.username; 
       Cache[username] = user; 
      }); 
    })() 
} 

그러나 이러한 종류의 작업에 대해서는 async을 고려하십시오.