我一直在想,使用mongodb的update和{upsert:true}选项,upsertedCount和modifiedCount是否可能都为0?我知道upsertedCount指的是创建的文档,modifiedCount指的是更新后的文档。所以使用upsert,我找不到两者都等于0的情况。我说错了吗?首先要感谢你的帮助。
mongodb
update
{upsert:true}
upsertedCount
modifiedCount
upsert
ozxc1zmp1#
我认为你的假设是正确的。Upsert基本上是指在找不到文档的情况下创建一个新文档。因此,如果在执行更新时将其设置为True,则文档存在并将被修改(将ModifiedCount设置为1)或文档不存在(将upsertCount设置为1)
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不存在,则会找到文档,但不会修改文档。
2条答案
按热度按时间ozxc1zmp1#
我认为你的假设是正确的。Upsert基本上是指在找不到文档的情况下创建一个新文档。因此,如果在执行更新时将其设置为True,则文档存在并将被修改(将ModifiedCount设置为1)或文档不存在(将upsertCount设置为1)
ymzxtsji2#
有一种情况是两者都为零。如果您在更新操作中而不是在查询中使用某个筛选器,并且该筛选器不匹配,它可能会找到文档,将matchedCount设置为1,并将upsertedCount设置为0,但由于子查询不匹配,您的ModifiedCount也将为0。
示例数据库:
示例查询:
结果:
该查询以一种奇怪的方式将3替换为4,但如果4不存在,则会找到文档,但不会修改文档。