你如何在下划线节点 js mongodb 中对此进行排序?
How do you sort this in underscore node js monogodb?
我知道我应该对此进行研究,但我的时间安排很严格。如何制作以下字符串:
[ { _id: { eventName: 'sometsdf', confirmed: false }, total: 1 },
{ _id: { eventName: 'somethon', confirmed: true }, total: 1 },
{ _id: { eventName: 'somethon', confirmed: false }, total: 1 } ]
变成类似
的东西
[ { eventName: 'somethon, confirmed: 1 , unconfirmed: 1},
{ eventName: 'sometdsf, confirmed: 0 , unconfirmed: 1}, ]
我使用了 mongodb 中的聚合函数,如下所示
obj.aggregate[{
$group: {
_id: {eventName: "$eventObject.event_name", confirmed: "$confirmation"},
total: {$sum: 1}
}
}]
学习node js才8个小时,后端开发人员走后突发状况。请帮忙。
我不确定下划线在这里是否比普通 JS 有多大帮助。您只需要遍历结果并创建映射对象。如果您使用 eventName
作为键,那么结果可以很容易地分组(感谢 Ninetainedo)。
let o = {}
docs.forEach(doc => {
let eventName = doc._id.eventName;
if (!o[eventName]) o[eventName] = { confirmed:0, unconfirmed: 0};
(doc._id.confirmed)
? o[eventName].confirmed++
: o[eventName].unconfirmed++
})
最终以对象而非数组形式结束,现在 _.map
可以帮助进行对象 -> 数组转换。
let grouped = _.map(o, (val, key) => {
val.eventName = key;
return val;
})
暴力破解。一点都不优雅:)
let x =[ { _id: { eventName: 'sometsdf', confirmed: false }, total: 1 },
{ _id: { eventName: 'somethon', confirmed: true }, total: 1 },
{ _id: { eventName: 'somethon', confirmed: false }, total: 1 } ]
let y = x.reduce((result, current) => {
if(!result[current._id.eventName]) {
result[current._id.eventName] = {eventName: current._id.eventName, confirmed: 0, unconfirmed: 0}
}
if(current._id.confirmed) {
result[current._id.eventName].confirmed += current.total
} else {
result[current._id.eventName].unconfirmed += current.total
}
return result
},{})
console.log(Object.keys(y).map(k => y[k]))
我知道我应该对此进行研究,但我的时间安排很严格。如何制作以下字符串:
[ { _id: { eventName: 'sometsdf', confirmed: false }, total: 1 },
{ _id: { eventName: 'somethon', confirmed: true }, total: 1 },
{ _id: { eventName: 'somethon', confirmed: false }, total: 1 } ]
变成类似
的东西[ { eventName: 'somethon, confirmed: 1 , unconfirmed: 1},
{ eventName: 'sometdsf, confirmed: 0 , unconfirmed: 1}, ]
我使用了 mongodb 中的聚合函数,如下所示
obj.aggregate[{
$group: {
_id: {eventName: "$eventObject.event_name", confirmed: "$confirmation"},
total: {$sum: 1}
}
}]
学习node js才8个小时,后端开发人员走后突发状况。请帮忙。
我不确定下划线在这里是否比普通 JS 有多大帮助。您只需要遍历结果并创建映射对象。如果您使用 eventName
作为键,那么结果可以很容易地分组(感谢 Ninetainedo)。
let o = {}
docs.forEach(doc => {
let eventName = doc._id.eventName;
if (!o[eventName]) o[eventName] = { confirmed:0, unconfirmed: 0};
(doc._id.confirmed)
? o[eventName].confirmed++
: o[eventName].unconfirmed++
})
最终以对象而非数组形式结束,现在 _.map
可以帮助进行对象 -> 数组转换。
let grouped = _.map(o, (val, key) => {
val.eventName = key;
return val;
})
暴力破解。一点都不优雅:)
let x =[ { _id: { eventName: 'sometsdf', confirmed: false }, total: 1 },
{ _id: { eventName: 'somethon', confirmed: true }, total: 1 },
{ _id: { eventName: 'somethon', confirmed: false }, total: 1 } ]
let y = x.reduce((result, current) => {
if(!result[current._id.eventName]) {
result[current._id.eventName] = {eventName: current._id.eventName, confirmed: 0, unconfirmed: 0}
}
if(current._id.confirmed) {
result[current._id.eventName].confirmed += current.total
} else {
result[current._id.eventName].unconfirmed += current.total
}
return result
},{})
console.log(Object.keys(y).map(k => y[k]))