7

这是我的文档的格式:

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

在该versions字段中,我存储对象{v: '2.5', count: 5},例如count保存版本使用次数的位置。

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

  1. versions如果数组不存在,则在数组中插入一个新对象
  2. Ff 特定版本存在于versions数组中,然后递增其count
4

1 回答 1

11

最简单的存在方式应该是,

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

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

位置运算符不能与 upsert 组合,因为它需要匹配的数组元素。如果您的更新导致插入,则“$”将按字面意思用作字段名称。

以下是 JIRA 票证,用于支持 $ 的 upsert。您可以投票并观看这些问题。

带有 $-positional 运算符的 Upsert 可以创建错误的文档

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

于 2012-06-25T07:42:57.107 回答