如何查询MongoDB集合内各字段对应的BSON数据类型
MongoDB无预指定属性查询全量字段BSON类型方法
直接执行以下聚合查询即可,将<your_collection>替换为实际集合名:
db.<your_collection>.aggregate([ // 将文档转换为键值对数组 { $project: { kv: { $objectToArray: "$$ROOT" } } }, // 拆分每个键值对为独立记录 { $unwind: "$kv" }, // 按字段名分组,聚合该字段所有出现过的BSON类型 { $group: { _id: "$kv.k", bsonTypeSet: { $addToSet: { $type: "$kv.v" } } } }, // 输出格式调整为 字段名 - 类型 样式 { $project: { _id: 0, result: { $concat: [ "$_id", " - ", { $join: [", ", "$bsonTypeSet"] } ] } } }, // 按字段名排序输出 { $sort: { result: 1 } } ])
结果说明
- 输出结果直接符合要求的
attribute1 - int、attribute2 - string格式,若同一字段存在多种数据类型,会用逗号分隔展示所有出现过的类型 $type操作符返回的是MongoDB标准BSON类型名,和你需要的int、string、bool等命名完全一致
注意事项
如果集合包含嵌套对象类型的字段,需要额外添加递归拆分子文档的逻辑,上述脚本默认仅统计第一层字段的类型
- 数据量超过100万的大集合建议先添加
{ $limit: 10000 }作为聚合第一阶段做抽样推导,避免全表扫描占用过多资源 - 如果需要仅统计每个字段出现频率最高的类型,可将
$addToSet替换为$first或自定义统计逻辑
内容的提问来源于stack exchange,提问作者prabhakar srivastava
相关产品推荐
相关产品推荐

