You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用Mongoose获取集合中各文档的字段填充完成率?

查询文档集合中每个文档的完成率方法

根据你的需求,这里提供两种可行的实现方式:

一、数据库端直接计算(以MongoDB为例)

如果你的文档存储在文档型数据库中,直接用聚合查询可以避免客户端遍历的开销,效率更高。假设已知每个文档的总字段数为固定值,示例聚合管道如下:

db.yourCollection.aggregate([
  {
    $project: {
      // 逐个判断字段是否非空,累加已填充字段数
      filledFields: {
        $sum: [
          { $cond: [{ $ne: ["$field1", null] }, 1, 0] },
          { $cond: [{ $ne: ["$field2", null] }, 1, 0] },
          { $cond: [{ $ne: ["$field3", null] }, 1, 0] },
          // 按需添加所有需要统计的字段
        ]
      },
      totalFields: 8 // 替换为实际总字段数
    }
  },
  {
    $project: {
      documentId: "$_id",
      filledCount: "$filledFields",
      completionRate: { $divide: ["$filledFields", "$totalFields"] }
    }
  }
])

这段代码会返回每个文档的ID、已填充字段数和完成率(小数形式),如果需要百分比可以乘以100后取整。

二、客户端遍历计算(以Python处理JSON文档为例)

如果需要自己编写函数遍历处理,比如本地JSON文档集合,可以用以下代码实现:

def calculate_completion_rates(documents):
    # 确定总字段数:若所有文档字段一致,取第一个文档的字段数量;否则收集所有唯一字段
    if not documents:
        return []
    # 方案1:假设所有文档字段一致
    total_fields = len(documents[0].keys())
    # 方案2:若字段不统一,收集所有唯一字段
    # all_fields = set()
    # for doc in documents:
    #     all_fields.update(doc.keys())
    # total_fields = len(all_fields)

    results = []
    for doc in documents:
        # 统计非空字段(可根据业务调整空值判断逻辑,比如排除空字符串、空数组)
        filled_count = sum(1 for val in doc.values() if val is not None and val != "")
        completion_rate = filled_count / total_fields if total_fields > 0 else 0.0
        results.append({
            "document_id": doc.get("_id"),
            "filled_count": filled_count,
            "completion_rate": round(completion_rate, 2)
        })
    return results

# 示例调用
# sample_docs = [{"_id": 1, "name": "Khaled", "age": 28, "city": ""}, {"_id": 2, "name": None, "age": 35, "city": "Cairo"}]
# for result in calculate_completion_rates(sample_docs):
#     print(result)

注意事项

  • 空值判断逻辑要贴合业务需求:比如空字符串、空数组、0这些值是否算"已填充",需要调整判断条件。
  • 如果文档字段不统一,要明确完成率的计算基准是"当前文档的字段总数"还是"集合中所有可能的字段总数",再对应调整代码。

内容的提问来源于stack exchange,提问作者khaled mohamed ram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 04:31:19