2013-06-27 2 views
0

Я пытаюсь сделать две функции. Save() должен проверить, существует ли для этого пользователя существующий документ, и если он затем обновит его сохранение новым, а если нет, то вставьте новый документ, используя уникальный идентификатор пользователя в качестве уникального идентификатора документов. Load() должен проверить, существует ли существующее сохранение с идентификатором пользователя и загрузить его. Я просто новичок, что и здесь ошибка я получаюМетеор: Как сохранить в коллекции и getdata из него?

Uncaught Error: Not permitted. Untrusted code may only update documents by 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

Объекты/документы id -field называется _id. See 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 для документа.

Надеюсь, что помогло!