2015-11-25 5 views
0

Мне нужно установить поле content элементу точки, заданному идентификатором.mongodb: обновить вложенное поле, которое задано двумя переменными

{ 
    "_id" : "kuwBhxAwEsJxc6oXc", 
    "points" : [ 
     { 
      "id" : "xdB8TbFweTbc9fecg", 
      "pos" : [ 
       604, 
       169 
      ] 
     }, 
     { 
      "id" : "uLoorpzQWm49KZ4w3", 
      "pos" : [ 
       197, 
       176 
      ] 
     } 
    } 
} 

Так что я получил docId = kuwBhxAwEsJxc6oXc, pointId = uLoorpzQWm49KZ4w3 и content = 'anything'. Я попытался это:

Collection.update(
    { _id: docId, 'points.id': pointId }, 
    { $set: { content: content } } 
); 

Результат должен быть:

{ 
    "_id" : "kuwBhxAwEsJxc6oXc", 
    "points" : [ 
     { 
      "id" : "xdB8TbFweTbc9fecg", 
      "pos" : [ 
       604, 
       169 
      ] 
     }, 
     { 
      "id" : "uLoorpzQWm49KZ4w3", 
      "pos" : [ 
       197, 
       176 
      ], 
      "content": "anything" 
     } 
    } 
} 

ответ

0

Вы должны использовать $ operator в своем обновлении, как это:

Collection.update(
    {_id: docId, 'points.id': pointId}, 
    {$set: {'points.$.content': content}} 
); 
+0

Просто для понимания: Если я хочу удалить один полный набор (id, pos и content), мне нужно выполнить '{$ unset: {'points. $': ''}}'? – user3142695

+1

Вы должны использовать '$ pull' следующим образом:' Collection.update ({_ id: docId}, {$ pull: {points: {id: pointId}}}); ' –

+0

Я понимаю. Спасибо. – user3142695

Смежные вопросы