@jvhaile/loopback4-helper
Version:
Helper components and tools for loopback 4.
67 lines (60 loc) • 1.75 kB
JavaScript
const _ = require('lodash')
function deepMapObj(obj) {
if (_.isArray(obj)) {
return obj.map(deepMapObj);
}
if (_.isObject(obj)) {
const newObj = {};
Object.keys(obj).forEach(key => {
newObj[key] = deepMapObj(obj[key]);
});
return newObj;
}
if (_.isString(obj) && obj.startsWith('$oid')) {
try {
return ObjectId(obj.slice(4));
} catch (e) {
return obj.slice(4);
}
}
return obj;
}
ObjectId = require('mongodb').ObjectID;
const query=[
{
"$facet":{
"recent":[
{ "$addFields": { "dmy": { "$dateToString": { "format": "%Y-%m-%d", "date": "$createdAt" } } } },
{
"$group": {
"_id": { "createdAt" : "$dmy" },
"count" : { "$sum" : 1 }
}
},
{
"$project": {
"_id":0,
"createdAt":"$_id.createdAt",
"count":1
}
},
{
"$sort":{"createdAt":1}
}
],
"total":[
{"$match":{"researchId":"$oid5fb93b3d3f89a635d824bee3"}},
{ "$group": { "_id": null, "total": { "$sum": 1 } } },
{ "$project": { "_id": 0 } }
]
}
},
{ "$addFields": { "sum": { "$arrayElemAt": [ "$total", 0 ] } } },
{
"$project":{
"recent":1,
"total":"$sum.total"
}
}
];
console.log(deepMapObj(query));