我有以下文档架构:
{
date: dateValue
items:
[
{ name: 'a', counter: 4},
{ name: 'b', counter: 17},
{ name: 'aabbb', counter: 15},
...
]
}
我希望有一个带有upsert的更新查询,如果该记录不存在,则会创建整个记录。 另外,我想检查列表中是否存在某个项目(按名称), 如果该项目不存在,我想在列表中添加一个新的,其中counter = 1。 如果该项目存在,则将计数器提高1。
有没有办法在一个更新语句中执行此查询?
答案 0 :(得分:0)
你需要做两件事:
使用更新时的{upsert:1}
标记插入特定日期文档(如果它尚不存在)。
使用{$inc}
运算符增加项目值。事实证明,如果你将一个不存在的字段增加1,它将被创建为值1(它就像它存在的值为0一样)。
您可能无法使用当前的架构完成上述任务。为了增加一个计数器,它必须是名称 - 即" a":1," b":17等。您目前将它作为关键字:" name& #34;,counter:" value"这意味着您只能使用位置运算符更新它们。但位置运算符要求您匹配元素才能成功更新它,因此使用策略来使用$inc
因此,如果您想在单个更新语句中执行此操作,则需要更改架构 - 只有您可以决定是否应该这样做,因为它可能会影响您的其他读写方式与数据互动。