0

私は2つの機能を作ろうとしています。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

            }
        }
}
4

1 に答える 1

1

オブジェクト/ドキュメントid-フィールドは と呼ばれ_idます。 こちらをご覧ください!

クライアント側で既存のオブジェクト/ドキュメントを更新しようとすると、エラーが発生します。_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

それが役に立ったことを願っています!

于 2013-06-27T17:17:29.647 に答える