bien, he aquí algunas preguntas relacionadas que pueden ayudar:
Get all field names en una colección en el mapa-a reducir.
Aquí está a recursive version que enumera todos los campos posibles.
Espero que pueda comenzar. Sin embargo, sospecho que se encontrará con algunos problemas con esta solicitud. Aquí hay dos problemas:
- No encuentro la función "gettype" para JSON. Puede realizar consultas por
$type
, pero no parece que realmente pueda ejecutar una función gettype
en un campo y hacer que los mapas vuelvan al tipo BSON.
- Un campo puede contener datos de varios tipos, por lo que necesitará un plan para manejarlo. Incluso si no es aparente, Mongo podría almacenar algunos números como ints y otros flotantes sin que realmente lo sepas. De hecho, con el controlador PHP, esto es bastante posible.
Así que si usted asume que pueda solucionar el problema # 1, entonces usted debería ser capaz de resolver el problema # 2 con una ligera variación en "Obtener todos los nombres de campo".
Probablemente algo como esto:
"map" : function() { for (var key in this) { emit(key, [ typeof value[key] ]); } }
"reduce" : function(key, stuff) { return (key, add_to_set(stuff)); }
Así que básicamente emitiría la key
y la type of key value
(como una matriz) en la función de mapa. Luego, desde la función de reducción, agregará entradas únicas para cada tipo.
Al final de la carrera que tendría que datos como estos
{"_id":[255], "name" : [1,5,8], ... }
Por supuesto, todo esto es un montón de trabajo, dependiendo de su problema real, es posible que sólo quieren garantizar (de su código) que siempre está poniendo el tipo correcto de datos. Encontrar el tipo de datos después de que los datos estén en la base de datos definitivamente es un dolor.
Esto le dará al tipo JS, que puede diferir de la de tipo BSON. Por ejemplo, si escribe typeof db.employee.findOne() ._id, obtendrá "string", pero el tipo BSON es "Object id". –