在Meteor中更新嵌套数组

时间:2014-09-09 09:28:25

标签: javascript arrays mongodb meteor

这是我的架构:

{
_id: "FJwSEMdDriddXLKXh"
name: "t"
number: "5"
owners: [
          {
           _id: 1,
           name: "Name",
           address: "Address",
           type: "Type",
           gender: "Gender",
           notes: []
          }
    ]
}

然后点击我会在所有者嵌套的notes数组中添加字段。 这是我的Meteor模板事件:

Template.owners.event({
  'click #addNoteToOwner' : function(event, template){
      event.preventDefault();
      Territories.update({_id: template.data._id, owners: this._id}, {$push : {'owners.$.notes':  {title:"First Title"}}})
    }
})

如果我尝试更新文档,则会出现以下控制台错误:

Uncaught Error: Not permitted. Untrusted code may only update documents by ID. [403]

我的语法是否正确?如何更新此嵌套数组?

谢谢!

1 个答案:

答案 0 :(得分:3)

owners字段中的查询存在错误:

Territories.update({
         _id: template.data._id,
         owners: {
             $elemMatch: {
                 _id: this._id
             }
         },
         {
             $push: {
                 'owners.$.notes': {
                     title: "First Title"
                 }
             }
         })

您将无法直接从客户端进行更新,因为您使用owners字段且仅允许_id。要解决此问题,您可以使用Meteor.methods进行更新,并从客户端调用该方法。