如何在数组中增加MongoDB文档对象字段

时间:2012-06-25 05:53:20

标签: mongodb nosql

这是我的文件格式:

{
    _id: some id,
    name: 'some name',
    versions: []
}

versions字段中,我存储{v: '2.5', count: 5}之类的对象,其中count包含版本的使用次数。

执行以下操作的最简单方法是什么?

  1. versions数组中插入新对象(如果该对象不存在)
  2. 如果versions数组中存在特定版本,则会增加其count

1 个答案:

答案 0 :(得分:10)

应该是

最简单方式,

db.collection.update({versions.v:'some_version'},{"$inc":{"versions.$.count":1}});

如果版本存在,这将增加您的计数,但正如MongoDB文档所述,$运算符不能与upsert混合,因此如果{versions.v:'some_version'}失败,上述查询将不会导致插入。

  

位置运算符不能与upsert结合使用   需要匹配的数组元素。如果您的更新导致插入   那么“$”将逐字地用作字段名称。

以下是支持upsert with $的JIRA门票。您可以投票并观看这些问题。

Upsert with $-positional operator can create bad documents

Support $ positional operator with an upsert