Meteor更新Collection对象

时间:2015-04-14 18:01:28

标签: meteor

在Meteor中,我有一个带有Schema的集合,并且动态添加了许多项目。

在这种情况下,我正在处理里程碑对象,一旦用户选中了一个,我想将此Collections项目中的complete更新为true(默认为false)

这是我的架构

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

如何为此编写$set语句?

3 个答案:

答案 0 :(得分:2)

你有一个对象数组,所以$elemMatch在这里做了诀窍。

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

答案 1 :(得分:0)

感谢Aldeed,我找到了一个解决方案 - 需要在服务器端调用,否则它不会让更新发生。做:

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

使用Meteor.call在客户端上调用该函数,并使用所有需要的参数。

答案 2 :(得分:-1)

根据您的架构,您有一个包含对象数组的对象。所以你应该这样写$set

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

这将更新与查询对应的第一个数组元素。

如果您想了解有关Mongo中阵列更新的更多信息,可以找到here官方文档。