Попробуйте:
db.collection.aggregate([{
$addFields: {
types: {
$arrayToObject: {
$map:
{
input: { $objectToArray: "$$ROOT" },
as: "each",
in: { k: '$$each.k', v: { $type: '$$each.v' } }
}
}}
}
}])
Сбор данных:
/* 1 */
{
"_id" : ObjectId("5e065992400289966eefb9a8"),
"username" : "myName",
"blog" : "myBlog",
"details" : "myBlogDetails",
"Object" : {
"inOneObject" : true
}
}
/* 2 */
{
"_id" : ObjectId("5e0659ae400289966eefbc3a"),
"username" : "othersName",
"blog" : "not a blog",
"details" : "useless"
}
Результат:
/* 1 */
{
"_id" : ObjectId("5e065992400289966eefb9a8"),
"username" : "myName",
"blog" : "myBlog",
"details" : "myBlogDetails",
"Object" : {
"inObject" : true
},
"types" : {
"_id" : "objectId",
"username" : "string",
"blog" : "string",
"details" : "string",
"Object" : "object"
}
}
/* 2 */
{
"_id" : ObjectId("5e0659ae400289966eefbc3a"),
"username" : "othersName",
"blog" : "not a blog",
"details" : "useless",
"types" : {
"_id" : "objectId",
"username" : "string",
"blog" : "string",
"details" : "string"
}
}
Примечание: Данный запрос будет работать только для полей верхнего уровня в документе, он не даст вам тип inObject
снизу поля ::
"Object" : {
"inOneObject" : true
}