PouchDB allDocs()返回行数与total_rows不符问题咨询
PouchDB bulkDocs后allDocs行数与total_rows不符的原因分析
文档冲突版本导致计数差异:
db.info()的doc_count和allDocs()的total_rows统计的是唯一文档ID的数量,而allDocs()默认会返回同一文档ID下的所有冲突版本。当bulkDocs批量写入时,如果出现版本冲突(比如并发写入同一ID、未正确处理_rev版本号),PouchDB会保留所有冲突的文档版本,这就会让返回的rows数组长度大于total_rows。bulkDocs的new_edits参数设置问题:
如果调用bulkDocs时传入了new_edits: false,PouchDB会跳过版本号检查,允许创建同一文档ID的多个独立版本。这种情况下,同一ID会对应多条文档记录,直接导致rows数远大于唯一ID的计数(total_rows)。压缩操作不处理冲突文档:
你执行的压缩(compact)操作只会清理标记为_deleted: true的文档,不会自动移除冲突的文档版本。即使手动执行压缩,冲突版本依然会被保留,所以allDocs()还是会返回这些额外的版本数据。
验证方法:随机选取几个文档ID,用db.get(docId, {conflicts: true})查询,若返回结果包含_conflicts字段,即可确认是冲突版本导致的行数差异。
内容的提问来源于stack exchange,提问作者Netnoob
相关产品推荐
相关产品推荐

