2017-09-21 1 views
0

입력 JSON 데이터이고 컬렉션 이름이 place라고 가정합니다.JSON 데이터에서 mongoDB 집계 연산을 사용하는 방법

[ 
    { 
     "time": ISODate("2016-11-27T011:43:01.000+05:30"), 'userId': 'abc' 
    }, 
    { 
     "time": ISODate("2016-11-28T01:43:01.000+05:30"),'userId': 'pqr' 
    }, 
    { 
     "time": ISODate("2016-11-27T08:43:01.000+05:30"), 'userId': 'abc' 
    }, 
    { 
     "time": ISODate("2016-11-27T02:43:01.000+05:30"), 'userId': 'abc' 
    }, 
    { 
     "time": ISODate("2016-11-27T011:43:01.000+05:30"), 'userId': 'pqr' 
    }, 
    { 
     "time": ISODate("2016-11-28T011:43:01.000+05:30"), 'userId': 'abc' 
    } 
] 

은 상기 주어진 JSON 데이터에서는 수집 된 사용자 로그 유지하고있다. 사용자가 처음으로 날짜를 기록 할 때 데이터를 찾아야합니다. 이 json 데이터에 대한 연산을 수행해야만 출력이이 형식이어야합니다.

출력

[{"date": "2016-11-27", 
    'user': [{'userId':'abc','time': ISODate("2016-11-27T08:43:01.000+05:30")}, 
      'userId':'pqr','time': ISODate("2016-11-27T11:43:01.000+05:30")] 
}, 
{"date": "2016-11-28", 
    'user': [{'userId':'abc','time': ISODate("2016-11-28T11:43:01.000+05:30")}, 
      'userId':'pqr','time': ISODate("2016-11-28T1:43:01.000+05:30")] 
}] 
+0

@Guys! 제발 날짜 형식에 집중하지 마십시오. 어떤 형식 으로든 인쇄하십시오. –

답변

1

당신은 집계 쿼리 아래에 시도 할 수 있습니다.

db.collection_name.aggregate([ 
    { 
    "$sort": { 
     "userId": 1, 
     "time": -1 
    } 
    }, 
    { 
    "$group": { 
     "_id": { 
     "date": { 
      "$dateToString": { 
      "format": "%Y-%m-%d", 
      "date": "$time" 
      } 
     }, 
     "userId": "$userId" 
     }, 
     "time": { 
     "$first": "$time" 
     } 
    } 
    }, 
    { 
    "$group": { 
     "_id": "$_id.date", 
     "user": { 
     "$push": { 
      "userId": "$_id.userId", 
      "time": "$time" 
     } 
     } 
    } 
    }, 
    { 
    "$sort": { 
     "_id": 1 
    } 
    } 
]) 
관련 문제