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

Rom*_*man 7 mongodb nosql

这是我的文档格式:

{
    _id: some id,
    name: 'some name',
    versions: []
}
Run Code Online (Sandbox Code Playgroud)

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

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

  1. versions如果数组不存在,则在数组内插入一个新对象
  2. 如果特定版本存在于versions数组内,则递增它count

Rav*_*har 10

应该是最简单的方式,

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

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

位置运算符不能与upsert组合,因为它需要匹配的数组元素.如果您的更新导致插入,那么"$"将字面上用作字段名称.

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

使用$ -positional运算符进行Upsert可以创建错误的文档

支持带位置的$位置运算符