2017-02-07 2 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としてください。