使用未知修改字段更新MongoDB集合的最佳实践

时间:2010-10-18 16:47:46

标签: php mongodb mongodb-php

所以我正在使用PHP和MongoDB构建一个应用程序,它在读取和写入时都会有相当多的流量。几个月之后,每秒应该有大约2500次读取和每秒200次写入(不确定)但是,与其他人相比,这在流量方面的确如何评价。

我对更新集合时该怎么做有点好奇;文档示例显示了更新特定集合字段的shell,但没有解释当集合中的任何数量的字段可能已更改时会发生什么。

例如,假设我有一个用户集合(非常简化的示例):

user = {
  _id     :  MongoId(...),
  name    : 'User One',
  email   : 'email@address.com',
  company : 'Company',
  ...
}

我们会在表单中显示所有可编辑字段,但用户只会更改其电子邮件地址。

严格来说,在性能方面,是否最好将原始值存储在隐藏的输入中,以便在PHP中进行比较,然后构建特定于更新的查询?

或者我应该替换所有可编辑的字段吗?

它将是一个包含对象和数组的集合 - 而不是这里显示的简单。

我知道优化之后,但我也希望通过MongoDB养成良好的习惯。

感谢。

1 个答案:

答案 0 :(得分:3)

您可能正在检索整个对象以显示可编辑的表单 - 我假设您将显示当前名称,电子邮件等,并允许他们编辑和提交新版本。这意味着您可以检查以查看更改内容并进行更新,而不是每次都上传和替换整个对象。

我建议使用优化的更新操作:"MongoDB Updating"。这样,您可以执行更优化的就地操作,而不是每次要编辑特定字段时替换整个对象。您可能主要关注$set$addToSet和(如果您正在处理许多嵌套对象,$位置运算符。

来自文档:

  

修改器操作

     

在更新现有值时,修改器操作非常高效且有用;例如,它们非常适合增加数字。 [和其他更复杂的事情]

     

...

     

修饰符更新具有避免查询和返回对象所涉及的延迟的优点。修改器更新还具有操作原子性和非常少的网络数据传输。

如果您对实施特定操作有更具体的问题,请随时提出。