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

fun*_*eah 2 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)
Run Code Online (Sandbox Code Playgroud)

Bjø*_*hen 5

做类似的事情:

Entries.update({_id: entry._id}, { $set: entry })
Run Code Online (Sandbox Code Playgroud)

典型的更新请求在表单上:

Collection.update(
   <query>,
   <update>
)
Run Code Online (Sandbox Code Playgroud)

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

完全替换文档

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

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

而有关更新的具体领域,使用$set,$inc等:

更新特定字段

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

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

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