OK,这里有一些相关的问题,可以帮助:
Get all field names集合中使用的map-reduce。
这是a recursive version列出所有可能的字段。
希望可以让你开始。不过,我怀疑你会遇到这个请求的一些问题。这里有两个问题:
- 我找不到JSON的“gettype”函数。您可以通过
$type
进行查询,但它看起来并不像您实际上可以在字段上运行gettype
函数,并将其映射回BSON类型。
- 一个字段可以包含多种类型的数据,所以您需要一个计划来处理这个问题。即使它不是很明显,Mongo可以存储一些数字作为整数,而其他的浮点数不会让你真正知道。事实上,使用PHP驱动程序,这是很有可能的。
所以,如果你认为你能解决问题#1,那么你应该能够使用上略有变化“获取所有字段名”解决问题#2。
它可能会是这个样子:
"map" : function() { for (var key in this) { emit(key, [ typeof value[key] ]); } }
"reduce" : function(key, stuff) { return (key, add_to_set(stuff)); }
所以基本上你会在地图的功能发出key
和type of key value
(作为一个数组)。然后从reduce函数中为每个类型添加唯一条目。
在运行结束时,你会有这样的
{"_id":[255], "name" : [1,5,8], ... }
当然数据,这都是很多的工作,这取决于你的实际问题,你可能只是想确保(从你的代码),你总是把正确的数据类型。数据在数据库中后查找数据类型绝对是一种痛苦。
这将给JS类型,其可从所述BSON类型而不同。例如,如果您键入db.employee.findOne()._ id,则会得到“string”,但BSON类型为“Object id”。 – 2014-10-16 02:37:13