Meteor:如何保存到集合中并从中获取数据?

时间:2013-06-27 16:34:56

标签: javascript mongodb meteor

我正在尝试制作两个功能。 Save()应该检查该用户是否有现有文档,如果有,则用新的更新他的保存,如果没有,则使用用户的唯一ID作为文档唯一ID插入新文档。 Load()应检查是否存在具有用户ID的现有保存并加载它。 我纯粹是新手,这是我得到的错误

  

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

我知道它是因为更新和插入工作的原因而发生的。但我想使用用户独特的iD文档,因为它看起来很简单。

function Save() {
        if (Meteor.userId()) {
            player = Session.get("Player");
            var save = {    
                    id: Meteor.userId(),
                    data = "data"
                    };
            console.log(JSON.stringify(save));
                if (Saves.find({id: Meteor.userId()})){
                    Saves.update( {id: Meteor.userId()}, {save: save} )
                    console.log("Updated saves")
                }
                else {
                    Saves.insert(save)
                }

            console.log("Saved");
            }
}

function Load(){
        if (Meteor.userId()){
            if (Saves.find(Meteor.userId())){
                console.log(JSON.stringify(Saves.find(Meteor.userId()).save.player));
                player = Saves.find(Meteor.userId()).save.player;
                data= Saves.find(Meteor.userId()).save.data

            }
        }
}

1 个答案:

答案 0 :(得分:1)

对象/文档id - 字段称为_idSee here!

当您尝试更新客户端上的现有对象/文档时,会发生此错误。 您始终需要传入对象_id以从客户端代码更新对象/文档。 请注意,您始终尝试传递id而不是_id

所以试试这样:

function Save() {
    if (Meteor.userId()) {
        player = Session.get("Player");
        var save = {    
                _id: Meteor.userId(),
                data = "data"
                };
        console.log(JSON.stringify(save));
            if (Saves.find({_id: Meteor.userId()})){
                Saves.update( {_id: Meteor.userId()}, {save: save} )
                console.log("Updated saves")
            }
            else {
                Saves.insert(save)
            }

        console.log("Saved");
        }
}

另请注意,您的Load()功能可以正常运行,因为Collection.find()会将您传递的字符串用作文档的_id

希望有所帮助!