2015-01-08 2 views
0

Я пытаюсь обновить суб-вложенный документ с помощью mongodb, но не работает.Обновление сложной схемы с суб-внедренным документом

Я хочу для chapter.id & quest.id дал, обновить процент этого документа (только этот один)

Моя схема выглядит следующим образом:

{ 
    "_id" : ObjectId("54ae5e63e71cef26050fca9a"), 
    "name" : "test", 
    "chapters" : [ 
     { 
      "id" : 1, 
      "quests" : [ 
       { 
        "id" : 1, 
        "name" : "quest1", 
        "percent" : 0 
       }, 
       { 
        "id" : 2, 
        "name" : "quest2", 
        "percent" : 0 
       } 
      ] 
     }, 
     { 
      "id" : 2, 
      "quests" : [ 
       { 
        "id" : 3, 
        "name" : "quest3", 
        "percent" : 0 
       }, 
       { 
        "id" : 4, 
        "name" : "quest4", 
        "percent" : 0 
       } 
      ] 
     } 
    ] 
} 

я попытался это:

db.test.update({name:"test" , "chapters.quests.id":1 , "chapters.id":1} , {$set:{ "chapters.quests.$.percent":1} }) 

и имеет эту ошибку

cannot use the part (chapters of chapters.quests.0.percent) to traverse the element ({chapters: [ { id: 1.0, quests: [ { id: 1.0, name: "quest1", percent: 0.0 }, { id: 2.0, name: "quest2", percent: 0.0 } ] }, { id: 2.0, quests: [ { id: 3.0, name: "quest3", percent: 0.0 }, { id: 4.0, name: "quest4", percent: 0.0 } ] } ]}) 

если я сделал это с 0 , если кто-то может мне помочь, это, возможно, проблемы с схемой?

+0

Вы не можете этого сделать. Внимательно прочитайте документацию оператора [positional '$'] (http://docs.mongodb.org/manual/reference/operator/update/positional/). Будет сопоставлен только «первый», что означает «внешний» элемент массива. Это не работает с вложенными массивами. –

ответ

0

Теперь это невозможно без указания положения объекта.

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