検索

ホームページ  >  に質問  >  本文

node.js - mongodb使用aggregate统计最大值并且返回完整信息

[
    {
        "_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
            }
        ]
天蓬老师天蓬老师2875日前668

全員に返信(1)返信します

  • PHP中文网

    PHP中文网2017-04-17 16:11:41

    参考までに、ニーズを満たすために醜いステートメントを書きました:

    リーリー

    このクエリを頻繁に使用する必要がある場合は、データ モデルの変更を検討することをお勧めします。

    MongoDB が大好きです!楽しむ!

    ------------------------ゴージャスなセパレーター---------------------------- --- ----------

    MongoDB 中国語コミュニティには多くのオフライン アクティビティがあります。以下をクリックしてください:

    2017 華山剣ディスカッション|MongoDB 中国語コミュニティ

    3 月の杭州駅がもうすぐ始まります。 ! ! 興味のあるお友達はすぐに登録してください! ! !

    返事
    0
  • キャンセル返事