2016-04-20 2 views
1

Я хочу, чтобы иметь возможность: Найти документ с определенным идентификатором, затем найти документ в унаследованном массиве на основе shortID и обновить массив наборов этот встроенный документ, который соответствует краткому идентификатору.Обновление встроенного документа в массиве - Mongodb + Node Driver

Очевидно, что-то еще не нажало на меня.

Я следующая структура:

{ 
    "id" : "5706e5b5cbc61e5bf3a9f4e7", 
    "legacy" : [ 
     { 
      "shortID" : "B1zHAllg", 
      "timeStamp" : "Apr 16th 2016", 
      "sets" : [ 
       { 
        "weight" : "7", 
        "reps" : "7" 
       }, 
       { 
        "weight" : "7", 
        "reps" : "7" 
       } 
      ] 
     }, 
     { 
      "shortID" : "HyUVCegx", 
      "timeStamp" : "Apr 16th 2016", 
      "sets" : [ 
       { 
        "weight" : "6", 
        "reps" : "6" 
       }, 
       { 
        "weight" : "6", 
        "reps" : "6" 
       } 
      ] 
     } 
    ] 
} 

Я пробовал много вариантов, но чувствовала, что я был ближе всего с попытками следующего:

db.bench.findAndModify({query:{id:"5706e5b5cbc61e5bf3a9f4e7"},sort:{legacy:{$elemMatch:{shortID:"HyUVCegx"}}},update:{$set:{sets:[9]}}}) 

db.bench.update({id : "5706e5b5cbc61e5bf3a9f4e7", legacy:{$elemMatch:{shortID:"HyUVCegx"}}}, {$set : { sets: [{"weight":"5", "reps" :"10"}] }}) 

ответ

1

Вы хотите использовать позиционные обновления для этого вида операций. Смотрите документацию для positional updates

Пример: В MongoDB оболочки, вы будете делать, как:

db.collection.updateOne(
{"legacy.shortID":"HyUVCegx"}, 
{$set: 
    {"legacy.$.sets": 
    [{"weight":"15", "reps" :"10"}] 
    } 
}) 

Запрос выше будет изменять содержание документов в legacy критериев соответствия, где shortID = "HyUVCegx"

+0

Идеальные! Спасибо тебе, Салем! –

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