0

First of all, this is the structure.

{ "isActive" : true,
  "playerLimit" : 2,
  "mode" : "Maul",
  "map" : "Dark woods",
  "name" : "Come and play with me",
  "_id" : ObjectId( "506fde5d7066645b8c000001" ),
  "players" : [ 
    { "hero" : "Brock, the summoner",
      "state" : "in lobby",
      "name" : "Elvar" }, 
    { "hero" : "Neal, the demon",
      "state" : "in lobby",
      "name" : "Test Spiller" } ],
  "__v" : 0 
}

I have selected just that with,

var game = db.model('Game');
game.find({_id : new ObjectID(data.game)}, function(err, res) {

Which works great. Inside the function however i want to traverse the players array, i've tried this

 res.players.forEach(function(player) {
    console.log(player.name +' | '+ data.name);
    if(player.name == data.name) permitted = true;
  });

Which seems not to work, i guess it because i a mongoCursor object, of some kind.

Since i'm using mongoose, i can't use toArray(), i feel a bit lost, how can i traverse my Players array easely?

whole code

var game = db.model('Game');
game.find({_id : new ObjectID(data.game)}, function(err, res) {

  if(err) {
    // game not found, close connection.
    socket.emit('disconnected', 'Error: game was not found.')
    socket.disconnect();
  }

  var permitted = false;
  res.players.forEach(function(player) {
    if(player.name == data.name) permitted = true;
  });

  if(!permitted) {
    // game not found, close connection.
    socket.emit('disconnected', 'Error: you are not permitted, to enter this game.');
    socket.disconnect();
  }
});
4

1 に答える 1

1

findMongoose を使用したコールバック (この例では)の 2 番目のパラメーターresは、見つかったドキュメントの配列です。findOneorは、単一の一致のみを期待する場合に使用findByIdします (この場合のように)。したがって、コードを次のように変更してみてください。

var game = db.model('Game');
game.findById(data.game, function(err, game) {

  if(err || !game) {
    // game not found, close connection.
    socket.emit('disconnected', 'Error: game was not found.')
    socket.disconnect();
    return;
  }

  var permitted = false;
  game.players.forEach(function(player) {
    if(player.name == data.name) permitted = true;
  });

  if(!permitted) {
    // game not found, close connection.
    socket.emit('disconnected', 'Error: you are not permitted, to enter this game.');
    socket.disconnect();
  }
});
于 2012-10-07T13:05:57.570 に答える