Получение данных из MongoDB с помощью Mongoose - PullRequest
2 голосов
/ 17 января 2012

Я пытаюсь поместить несколько документов из коллекции MongoDB в массив, используя node.js & mongoose.Запись userDoc в _.each -loop работает нормально, но не добавляет их в массив.

Что я делаю не так?
Мое лучшее предположение, что я неправильно понял что-то относительно асинхронного узладизайн, но я понятия не имею, что я должен изменить.

Код с комментариями:

returnObject.list = [];

Users.find({}, function (err, user){

    _.each(user, function(userDoc){             
        console.log(userDoc); // Works
        returnObject.list.push(userDoc); // No errors, but no users appended
    });

});


console.log(returnObject); // No users here!

res.send(JSON.stringify(returnObject)); // Aint no users here either!

Ответы [ 2 ]

5 голосов
/ 17 января 2012

Ах, это хорошо, вы пытаетесь сделать что-то в синхронном стиле:

Users.find({}, function (err, user){
  // here you are iterating through the users
  // but you don't know when it will finish
});

// no users here because this gets called before any user
// is inserted into the array
console.log(returnObject); 

Вместо этого вы должны сделать что-то вроде этого:

var callback = function (obj) {
  console.log(obj);
}

Users.find({}, function (err, user){
  var counter = user.length;

  _.each(user, function(userDoc) {
    if (counter) {
      returnObject.list.push(userDoc);          
      // we decrease the counter until 
      // it's 0 and the callback gets called
      counter--;
    } else {
      // since the counter is 0
      // this means all the users have been inserted into the array
      callback(returnObject);
    }
  });

});
0 голосов
/ 17 января 2012

сделайте util.inspect(user), чтобы увидеть, что у вас есть перед каждым циклом.

...