MongoDB具有更新查询,创建和添加项目以列出或增加项目的计数器

时间:2013-06-12 15:54:13

标签: mongodb

我有以下文档架构:

{
    date: dateValue
    items:
        [
            { name: 'a', counter: 4},
            { name: 'b', counter: 17},
            { name: 'aabbb', counter: 15},
            ...
        ]       
}

我希望有一个带有upsert的更新查询,如果该记录不存在,则会创建整个记录。 另外,我想检查列表中是否存在某个项目(按名称), 如果该项目不存在,我想在列表中添加一个新的,其中counter = 1。 如果该项目存在,则将计数器提高1。

有没有办法在一个更新语句中执行此查询?

1 个答案:

答案 0 :(得分:0)

你需要做两件事:

  1. 使用更新时的{upsert:1}标记插入特定日期文档(如果它尚不存在)。

  2. 使用{$inc}运算符增加项目值。事实证明,如果你将一个不存在的字段增加1,它将被创建为值1(它就像它存在的值为0一样)。

  3. 您可能无法使用当前的架构完成上述任务。为了增加一个计数器,它必须是名称 - 即" a":1," b":17等。您目前将它作为关键字:" name& #34;,counter:" value"这意味着您只能使用位置运算符更新它们。但位置运算符要求您匹配元素才能成功更新它,因此使用策略来使用$inc

  4. 因此,如果您想在单个更新语句中执行此操作,则需要更改架构 - 只有您可以决定是否应该这样做,因为它可能会影响您的其他读写方式与数据互动。