好的,这里有一些相关的问题可能会有所帮助:
使用 map-reduce获取集合中的所有字段名称。
这是一个列出所有可能字段的递归版本。
希望这可以让你开始。但是,我怀疑您将在此请求中遇到一些问题。这里有两个问题:
- 我找不到 JSON 的“gettype”函数。您可以通过 查询
$type
,但看起来您实际上不能gettype
在字段上运行函数并将其映射回 BSON 类型。
- 一个字段可以包含多种类型的数据,因此您需要一个计划来处理它。即使在你不知道的情况下,Mongo 也可以将一些数字存储为整数,而其他浮点数并不明显。事实上,使用 PHP 驱动程序,这是完全可能的。
因此,如果您假设您可以解决问题 #1,那么您应该能够使用"Get all field Names"的细微变化来解决问题 #2 。
它可能看起来像这样:
"map" : function() { for (var key in this) { emit(key, [ typeof value[key] ]); } }
"reduce" : function(key, stuff) { return (key, add_to_set(stuff) ); }
所以基本上你会在 map 函数中发出key
and type of key value
(作为一个数组)。然后从 reduce 函数中,您将为每种类型添加唯一条目。
在运行结束时,您将拥有这样的数据
{"_id":[255], "name" : [1,5,8], ... }
当然,这都是很多工作,根据您的实际问题,您可能只想确保(从您的代码)您始终输入正确类型的数据。在数据进入数据库后查找数据类型绝对是一件痛苦的事情。