2017-03-16 5 views
0

나는 이것을 조사해야했음을 안다. 그러나 나는 엄격한 시간표에있다. 다음 문자열을 어떻게해야합니까 :밑줄 노드 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}, ] 

등이 내가 배운 이후 그것은 단지 8 시간이 지났습니다

obj.aggregate[{ 
$group: { 
    _id: {eventName: "$eventObject.event_name", confirmed: "$confirmation"}, 
    total: {$sum: 1} 
} 
}] 

을 다음과 같이하여 MongoDB에서 집계 함수를 사용했다 노드 js에 관한 것이고 이는 백엔드 개발자가 떠난 이후 비상 사태입니다. 도와주세요.

+0

각 이벤트마다 항상 최대 2 개의 항목이 있습니까? – Veeram

답변

0

일반 JS보다 밑줄이 많은 도움이 될지 확신하지 못합니다. 결과를 반복하고 매핑 된 객체를 만들어야합니다. eventName을 키로 사용하면 결과를 쉽게 그룹화 할 수 있습니다 (감사합니다 Ninetaino). > 배열 변환 - 객체가 아닌 배열로 끝나는

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; 
}) 
+0

그룹화가 누락되었습니다. 예상 출력은 3 대신 길이가 2입니다. – Telokis

+0

oh yeah ... 건배 – Matt

1

브 루트 포스 용액. 전혀 우아하지 않습니다 :)

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]))