Meteor js,如何获得更新整个客户端文档的副作用

时间:2014-05-27 19:41:23

标签: javascript mongodb meteor minimongo

我有一个Meteor方法,我从客户端调用,然后更新单个文档中的所有字段。在下面的最后一行代码中,我尝试立即在客户端上运行相同的更新以获得直接的副作用(它假设更新将通过)。麻烦的是我得到了:

  

更新失败:访问被拒绝。在受限制的集合中,您只能更新文档,而不能替换它们。使用Mongo更新运算符,例如' $ set'

试图这样做时。我不想更新单个字段,我想更新整个文档。有没有办法正确地做到这一点?

entry = {
    title: title
    text: text
    tags: entry.tags
    mode: $('#mode').val()
    file_ids: entry.file_ids
}

eid = Session.get('entryId')
entry._id = eid if eid

context = Session.get('context')
Meteor.call('saveEntry', title, entry, context)
Entries.update({_id: entry._id}, entry)

1 个答案:

答案 0 :(得分:5)

做类似的事情:

Entries.update({_id: entry._id}, { $set: entry })

典型的更新请求位于表单上:

Collection.update(
   <query>,
   <update>
)

从Mongodb文档中,关于使用常规键进行更新:值对象:

  

完全替换文档

     

如果文档仅包含field:value表达式,则:

     
      
  • update()方法用文档替换匹配的文档。 update()方法不替换_id值。   有关示例,请参阅替换所有字段。
  •   
  • update()无法更新多个文档。
  •   

以及使用$set$inc等来更新特定字段:

  

更新特定字段

     

如果文档包含更新运算符表达式,例如使用$ set运算符的表达式,则:

     
      
  • 文档必须只包含更新运算符表达式。
  •   
  • update()方法仅更新文档中的相应字段。有关示例,请参阅更新特定字段。
  •   

此外,据我所知,从您的错误消息Meteor不允许从客户端完全替换整个文档。因此,一个选项是使用$set运算符并设置所有值,在本例中是整个文档本身。在将文档传递给_id运算符之前,您通常可以跳过将$set键添加到文档中。