0

我有以下文档架构:

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

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

有没有办法用一个更新语句来做这个查询?

4

1 回答 1

0

你需要做两件事:

  1. {upsert:1}如果特定日期文档尚不存在,请使用更新标志插入特定日期文档。

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

  3. 您可能无法使用您当前拥有的架构完成上述操作。为了增加一个计数器,它必须是名称 - 即“a”:1,“b”:17等。您目前将其作为键:“名称”,计数器:“值”,这意味着您只能更新他们与位置运算符。但是位置运算符要求您匹配一个元素才能成功更新它,所以有使用策略$inc

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

于 2013-06-13T02:34:38.853 回答