2015-02-27 4 views
2

У меня есть объект с атрибутами. Это включает в себя массив других объектов, которые имеют свои собственные атрибуты.findOneAndUpdate - обновить первый объект в массиве с определенным атрибутом

Lobby: 
    --> "a": "b" 
    --> "c": "d" 
    --> Players:[ 
     --> 0 
      --> "x": "23" 
      --> "status": "ready" 
     --> 1 
      --> "x": "54" 
      --> "status": "open" 
     --> 2 
      --> "x": "16" 
      --> "status": "open" 

Как будет идти об обновлении первого объекта игрока, который имеет "status": "open" (в данном случае 1) на новый объект?

Например:

player = { 
      x: "125", 
      status: 'joined' 
     }; 
+1

(использование $ оп) в db.collection.update Монго оболочки ({_d: х 'player.status': 'открытая'}, {$ набор:. {Игрок *: {// ваш новый player}}} – Disposer

+0

@Disposer И как бы я это сделал в Mongoose? –

ответ

3

мне удалось найти рабочее решение!

Game.findOneAndUpdate({'a': 'b', 'Players.status': 'open'}, { $set : { 'Players.$': player} }, 
function (err, doc) { 
    if (err) { 
     console.log(err); 
    } else { 
     // Do stuff 
    } 
});