使用更新查询的MongoDB,创建项目并将其添加到列表或增加项目';柜台

使用更新查询的MongoDB,创建项目并将其添加到列表或增加项目';柜台,mongodb,Mongodb,我有以下文档架构: { date: dateValue items: [ { name: 'a', counter: 4}, { name: 'b', counter: 17}, { name: 'aabbb', counter: 15}, ... ] } 我希望有一个upsert更新查询,如果记录不存在,它将创建整个记录。 此外,我想检

我有以下文档架构:

{
    date: dateValue
    items:
        [
            { name: 'a', counter: 4},
            { name: 'b', counter: 17},
            { name: 'aabbb', counter: 15},
            ...
        ]       
}
我希望有一个upsert更新查询,如果记录不存在,它将创建整个记录。 此外,我想检查列表中是否存在某个项目(按其名称), 如果该项不存在,我想在列表中添加一个计数器为1的新项。 如果项目存在,将计数器提高1


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

您需要做两件事:

  • 在更新时使用
    {upsert:1}
    标志插入尚未存在的特定日期文档

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

  • 您可能无法使用当前的模式完成上述任务。为了增加计数器,它必须是名称-即“a”:1,“b”:17等。您当前将其作为键:“名称”,计数器:“值”,这意味着您只能使用位置运算符更新它们。但是位置操作符要求您匹配一个元素,以便成功地更新它,因此使用
    $inc


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

    感谢您的回复,我已经按照您的建议对模式进行了更改,因为这是我能找到的唯一解决方案。