字段在mongodb中的集合数据类型

时间:2014-01-09 12:02:28

标签: mongodb mongoose

如何在mongodb中获取集合的字段信息。

我正在寻找的信息是

  • 字段名称
  • 数据类型

3 个答案:

答案 0 :(得分:0)

您需要遍历所有文档并找出所使用的名称以及每个特定字段使用的类型。 MongoDB没有架构,因此没有捷径可以获取它。还要注意每个字段的值也可以具有完全不同的数据类型 - MongoDB的另一个强项。

要找出一些统计信息,例如字段名称,以下脚本可以提供帮助:

mr = db.runCommand({
  "mapreduce" : "things",
  "map" : function() {
    for (var key in this) { emit(key, null); }
  },
  "reduce" : function(key, stuff) { return null; }, 
  "out": "things" + "_keys"
})

然后在生成的集合上运行distinct,以便找到所有键:

db[mr.result].distinct("_id");

但是没有办法将字段类型包含在这样的Map / Reduce作业中。

答案 1 :(得分:0)

您无法确定集合的架构。 E 集合的对象可能具有不同的架构,您应该知道这一点。

I made a similar question a few months ago,在帖子中你可以找到如何使用java编程语言检索对象的模式;但是,据我所知,除了尝试转换对象(this is the way the BasicBsonObjects do i t)之外,无法检索数据类型。

答案 2 :(得分:0)

MongoDB支持动态模式,在MongoDB 2.4中没有用于模式内省或分析的内置功能。<​​/ p>

但是..可以通过检查文档样本或整个集合中的Map / Reduce来推断架构。

有一些开源工具可以将这种方法打包在一个有用的界面中,例如:

  • Schema.js - 使用mongo原型
  • 扩展collection.schema() shell
  • Variety - 作为独立脚本运行

我喜欢schema.js的方法,并将其包含在我的~/mongorc.js启动文件中,以便在我的mongo shell会话中使用。

默认情况下,schema.js最多可分析集合中的50个文档并以内联方式返回结果。有一个limit选项可以检查集合中的更多(甚至所有)文档,它支持Map / Reduce out options,因此可以选择保存结果或与输出集合合并。