Cosmos DB删除文档后调用PatchItemStreamAsync为何会重建该文档?
问题原因解析
这是Azure Cosmos DB在indexingMode设为"none"时的特定行为:
- 当索引模式为
"none"时,容器仅保留主键的基础索引,不会维护其他任何索引,也无法通过索引快速校验指定ID的文档是否存在于对应分区中。 - 为了避免低效的全分区扫描来确认文档存在性,
PatchItemStreamAsync这类Patch操作会自动切换为Upsert逻辑:如果目标ID的文档不存在,就直接创建一个仅包含补丁中指定字段的新文档;如果文档存在,则执行修改操作。 - 而当索引模式为默认的
"consistent"或"lazy"时,系统可以通过主键索引快速定位文档,一旦检测到文档不存在就会返回404 Not Found错误,不会自动重建文档。
你手动删除文档后查询能确认删除,是因为查询时(哪怕是按ID查询),在indexingMode="none"下会执行全分区扫描找到结果,但Patch操作不会走这个低效的校验流程,直接执行Upsert。
内容的提问来源于stack exchange,提问作者Tanuki
相关产品推荐
相关产品推荐

