难以使用$ push插入子记录数组,导致内部服务器错误

时间:2013-12-18 03:05:00

标签: mongodb meteor

我正在尝试在我的数据库中创建以下记录:

{
    "userid":
    "songs":[
         {
              "title":
              "artist":
         }
         {
              "title":
              "artist":
         }
    ]

}

一个用户下可以有多首歌曲。我不确定插入具有多个子记录的记录的正确语法。我尝试使用:

Links.insert({userid: "user1", $push: {songs: {"song1","artist1"}}});

我尝试使用另一个替代方法,即首先创建仅包含userid字段的记录,然后进行更新以将歌曲推送到记录中。但是,当我执行以下操作时出现以下错误:

Links.update({_id: Links.findOne({userid: "user1"})._id, $push: {songs:{"song1","artist1"}}});

未捕获错误:不允许。不受信任的代码只能按ID更新文档。 [403]

我很困惑,因为我使用_id字段来更新记录。关于如何解决这个问题的任何建议?

1 个答案:

答案 0 :(得分:1)

您的mongo查询错误。这些应该工作(未经测试):

插入

Links.insert({ 
    userid : "user1", 
    songs : [ 
        { title : "song1", artist : "artist" }, 
        ... 
    ] 
});

您无需在insert命令中推送数组。

<强>更新

Links.update({
    _id : Links.findOne({ userid : "user1" })._id
},
{
    "$push" : { title : "song1", artist : "artist" }
});

请注意,Update查询传递了两个对象,一个是selector,第二个是要应用的modifier

请参阅http://docs.meteor.com/#selectors