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

7
这是我的文档格式:

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

在`versions`字段中,我存储像`{v: '2.5', count: 5}`这样的对象,其中`count`保存版本使用次数。
以下是实现以下操作的最简单方法:
1. 如果不存在,则在`versions`数组中插入一个新对象。 2. 如果特定版本存在于`versions`数组中,则将其`count`递增。
1个回答

11

最简单的方法应该是:

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

如果版本存在,这将增加您的计数,但是正如MongoDB文档所说,$操作符不能与upsert混合使用,因此上述查询如果{versions.v:'some_version'}失败,将不会插入任何内容。

位置操作符无法与upsert结合使用,因为它需要匹配数组元素。如果您的更新结果导致插入,则"$"字面上将用作字段名。

以下是支持$ upsert的JIRA票证。您可以对这些问题进行投票和关注。

Upsert with $-positional operator can create bad documents

Support $ positional operator with an upsert


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接