ModifiedCount和upsertedCount是否都为0?

qybjjes1  于 2022-10-22  发布在  Go
关注(0)|答案(2)|浏览(273)

我一直在想,使用mongodbupdate{upsert:true}选项,upsertedCountmodifiedCount是否可能都为0?
我知道upsertedCount指的是创建的文档,modifiedCount指的是更新后的文档。
所以使用upsert,我找不到两者都等于0的情况。
我说错了吗?
首先要感谢你的帮助。

ozxc1zmp

ozxc1zmp1#

我认为你的假设是正确的。Upsert基本上是指在找不到文档的情况下创建一个新文档。因此,如果在执行更新时将其设置为True,则文档存在并将被修改(将ModifiedCount设置为1)或文档不存在(将upsertCount设置为1)

ymzxtsji

ymzxtsji2#

有一种情况是两者都为零。如果您在更新操作中而不是在查询中使用某个筛选器,并且该筛选器不匹配,它可能会找到文档,将matchedCount设置为1,并将upsertedCount设置为0,但由于子查询不匹配,您的ModifiedCount也将为0。
示例数据库:

{
    _id: 2
    items: [1, 2]
}

示例查询:

db.collection.updateOne(
    {_id: 2},
    { $set: { items.$[elem]: 4 } },
    { arrayFilters: [{elem: 3}], upsert: true }
)

结果:

{ acknowledged: true,
  insertedId: null,
  matchedCount: 1,
  modifiedCount: 0,
  upsertedCount: 0 }

该查询以一种奇怪的方式将3替换为4,但如果4不存在,则会找到文档,但不会修改文档。

相关问题