2013-05-06 3 views
2

У меня есть «комплекс» объект похож на это в моем MongoDB документа:Обновление сложного объекта в MongoDB документе

{_id: "5zvYuC37aXSAjGNEg", 
    profile: { 
    name: "profile_name", 
    keys:[{ 
     keyID: "12345", 
     code: "12345", 
     chars:[{ 
     name: "char_name1", 
     char_id: "12345", 
     active: 0 
     }, { 
     name: "char_name2", 
     char_id: "67890", 
     active: 0 
     }] 
    }] 
    } 
} 

Можно ли обновить значение active, на основании которого char_id я перехожу на мой запрос ? Эквивалент в MySQL будет, вероятно, что-то вроде:

UPDATE sometable SET active = 1 WHERE char_id = 12345

Я попытался запустить этот запрос:
Meteor.users.update(Meteor.userId(), {char_id:char_id}, {$set:{active:1} });
, но после этого, мой объект потерял все значения, кроме _id и char_id.

+0

Вы перезаписаны данные с вашим пользователям обновлять. Он должен выглядеть так: 'Meteor.users.update ({_ id: Meteor.userId(), char_id: char_id}, {$ set: {active: 1}})'. В методе обновления второй аргумент должен быть тем, что вы хотите обновить, и у вас есть второй аргумент как селектор. Третьим должен быть обратный вызов. – MatiK

ответ

2

Я не знаю, как писать в метеора, но ниже запроса следует обновить в Монго оболочки

db.Test.update({"profile.keys.chars.char_id":"12345"}, {$set: {"profile.keys.0.chars.$.active": "1"}}) 
+0

не зная его данных, что, если у меня есть 7 строк с тем же char_id. он обновляет первый код – Drew

+1

, если у него chaNGE это что-то вроде db.junk7.update ({_ id: "7zvYuC37aXSAjGNEg", "profile.keys.chars.char_id": "12345"}, {$ set: {"profile. keys ..chars. $. active ":" 92 "}}) – Drew

+0

Я пробовал с кодом Ajay, и я получил сообщение об ошибке:' Uncaught Error: не может присоединяться к массиву с использованием имени строкового поля [chars] '. Постараюсь немного поиграть с кодом Дрю, но мне нужно выйти сейчас, поэтому я немного отпущу его. – errata

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