node.js - mongodb使用aggregate统计最大值并且返回完整信息
天蓬老师
天蓬老师 2017-04-17 16:09:41
0
1
655
[
    {
        "_id" : ObjectId("58ad2f4b52823f000f0ea3f3"),
        "serverPortCount" : {
            "port1883" : 10,
            "port80" : 10
        },
        "serverIP" : "192.168.0.15",
        "statsTime" : 1487744242702,
        "creatTime" : 1487744843961,
        "statsType" : 1,
        "__v" : 0
    },
    {
        "_id" : ObjectId("58ad2f4b52823f000f0ea3f4"),
        "serverPortCount" : {
            "port1883" : 20,
            "port80" : 20
        },
        "serverIP" : "192.168.0.15",
        "statsTime" : 1487744302716,
        "creatTime" : 1487744843962,
        "statsType" : 1,
        "__v" : 0
    },
    {
        "_id" : ObjectId("58ad2f4b52823f000f0ea3f5"),
        "serverPortCount" : {
            "port1883" : 30,
            "port80" : 30
        },
        "serverIP" : "192.168.0.14",
        "statsTime" : 1487744362730,
        "creatTime" : 1487744843963,
        "statsType" : 1,
        "__v" : 0
    }
]

我有一组数据,数据结构是上面的那个样子,然后现在想统计出来某个时间段内的serverIP的serverPortCount里面的port1883+port80最大的记录,期望的结果是

我现在的做法使用使用aggregate

  WsStats
        .aggregate()
        .match({
            statsType:1,
            statsTime:{ $gte : startTime, $lt : endTime }
        })
        .group({
            _id: "$serverIP",
            maxCount: { $max: { $add: [ "$serverPortCount.port80", "$serverPortCount.port1883" ] } }
        })
        .project({
            maxCount:1,
            serverIP:"$_id"
        })
        .exec(callback);

现在是可以统计出来最大数,结果如下

    [
            
            {
  
                maxCount:40,
                "serverIP" : "192.168.0.15",
            },
            {
                maxCount:60,
                "serverIP" : "192.168.0.14"
            }
        ]

但是我想知道完整的记录,期望结果如下:

    [
            
            {
                "_id" : ObjectId("58ad2f4b52823f000f0ea3f4"),
                "serverPortCount" : {
                    "port1883" : 20,
                    "port80" : 20
                },
                maxCount:40,
                "serverIP" : "192.168.0.15",
                "statsTime" : 1487744302716,
                "statsType" : 1
            },
            {
                "_id" : ObjectId("58ad2f4b52823f000f0ea3f5"),
                "serverPortCount" : {
                    "port1883" : 30,
                    "port80" : 30
                },
                maxCount:40,
                "serverIP" : "192.168.0.14",
                "statsTime" : 1487744362730,
                "statsType" : 1
            }
        ]
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

모든 응답(1)
Ty80

참고용으로 요구 사항을 충족하기 위해 추악한 설명을 작성했습니다.

으아아아

이 쿼리를 자주 사용해야 하는 경우 데이터 모델 수정을 고려하는 것이 좋습니다.

MongoDB를 사랑해주세요! 재미있게 보내세요!

------------화려한 구분선------ --- ----------

MongoDB 중국어 커뮤니티에는 다양한 오프라인 활동이 있습니다. 아래를 클릭하세요.

2017 Huashan Sword 토론|MongoDB 중국 커뮤니티

3월 항저우역이 곧 다가옵니다! ! ! 관심있는 친구들은 빨리 신청해주세요! ! !

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿