2015-04-14 3 views
0

в Meteor, у меня есть коллекция со схемой, и количество элементов добавляется динамически.Meteor update a Объект коллекции

В данном случае я имею дело с вехи объекта, и как только пользователь проверить одноразовый Я хочу, чтобы обновить полными в этом пункте Collections истины (по умолчанию является ложным)

Вот моя схема

milestones: { 
type: Array, 
optional: true 
}, 
'milestones.$': { 
type: Object 
}, 
'milestones.$.name': { 
type: String 
}, 
'milestones.$.hours': { 
type: Number 
}, 
'milestones.$.complete': { 
type: Boolean 
} 

Как написать заявление $set для этого?

+0

'Milestones.update ({_ id: this._id}, {$ set: {'milestone.complete': true}}) Предположим, вы используете обработчик событий, и вы можете использовать контекст' this._id' , – Ethaan

+0

Только этапы - это не коллекция, это объект в коллекции проектов. Я пробовал этот «Projects.update» ({_ id: currentPostId, «milestones.name»: this.name}, {$ set: {completed: true}}); 'но безрезультатно .. – user841760

+0

почему вам нужно имя? просто выполните 'Projects.update ({_ id: currentPostId}, {$ set: {'milestones.complete': true}})' – Ethaan

ответ

-1

В соответствии с вашей схемой у вас есть объект, содержащий массив объектов. Таким образом, вы должны написать вам $set как это:

{$set: {'milestone.$.complete':value}} 

Это обновит первый элемент массива, соответствующий запрос.

Информацию о обновлениях массивов в Монго вы можете найти в официальной документации here.

2

У вас есть массив объектов, поэтому $elemMatch сделайте трюк здесь.

Projects.update({_id:this._id},{milestones:{$elemMatch:{'milestones.$‌​.name':this.name}},{$set:{'milestone.$.complete':value}}}) 
0

Итак, благодаря Aldeed я нашел решение, которое нужно вызвать на стороне сервера, иначе оно не позволит обновлению. Do:

Projects.update({_id:currentPostId, 'milestones.name':name}, {$set:{'milestones.$.complete':true}}); 

Эта функция вызывается клиентом с Meteor.call со всеми необходимыми параметрами.