2016-01-15 4 views
0

Я хочу обновить этот документ ...MongoDB: Обновление вложенных элементов

{ 
    "_id" : "2QCTWXJHMa3Sjnta5", 
    "text" : [ 
     { 
      "id" : "krD8yXFEEd8Esc4Qc", 
      "sentence" : "dasdsada." 
     }, 
     { 
      "id" : "AwXHZmPKSPyKvd9E9", 
      "sentence" : "adsdadas ." 
     }, 
     { 
      "id" : "bsf6RyKDQyrnqsmK7", 
      "sentence" : "daadadadad" 
     } 
    ] 
} 

... к этому

{ 
    "_id" : "2QCTWXJHMa3Sjnta5", 
    "text" : [ 
     { 
      "id" : "krD8yXFEEd8Esc4Qc", 
      "sentence" : "dasdsada." 
     }, 
     { 
      "id" : "AwXHZmPKSPyKvd9E9", 
      "sentence" : "Just changed" 
     }, 
     { 
      "id" : "bsf6RyKDQyrnqsmK7", 
      "sentence" : "daadadadad" 
     } 
    ] 
} 

Поэтому я попробовал:

Collection.update(
    { _id: '2QCTWXJHMa3Sjnta5', text.id: 'AwXHZmPKSPyKvd9E9' }, 
    { $set: { sentence: "Just changed" }} 

); 

Что же я делать не так?

ответ

1

Вам необходимо идентифицировать элемент в массиве, чтобы его обновить. Вы можете сделать это с позицией $ operator.

Помните, что оператор positional $ выступает в качестве заполнителя для первого элемента массива, который соответствует запросу. Таким образом, вы можете обновить только первый сопоставленный элемент в массиве.

Попробуйте следующий запрос:

Collection.update(
    { _id: '2QCTWXJHMa3Sjnta5', 'text.id': 'AwXHZmPKSPyKvd9E9' }, 
    { $set: { 'text.$.sentence': "Just changed" }} 

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