2016-11-09 2 views
1

私は前方へ移動しようとしていますが、私はもうこれ以上遠くないと思います。あなたの助けをもう一度やり直してください。リクエストで日付の結果が1つしかありません。どうすれば結果を得ることができますか?私はすべての必要な書類を含めて試合条件を調整しました。なぜ$を最初に置くのか分かりません。

db.collection.aggregate([ 
{ "$match": {"CollectionTime": { $gte: ISODate("2016-11- 10T00:00:00.000Z")},"Rx Rate": { $exists: true }}}, 
{ "$group": { 
"_id": "$ResourceName", 
DeviceName: { $first: "$DeviceName" }, 
ResourceName: { $first: "$ResourceName" }, 
Date: { $first: "$CollectionTime" }, 
AVGRxRATE: { $avg: "$Rx Rate" }, 
AVGTxRATE: { $avg: "$Tx Rate" }, 
MaxRxRATE: { $max: "$Rx Rate" }, 
MaxTxRATE: { $max: "$Tx Rate" } 
} 
}, 
{ 
$project: { 
_id: 0, 
DeviceName: 1, 
ResourceName: 1, 
Date: { $dateToString: { format: "%Y-%m-%d", date: "$Date" } }, 
AVGRxRATE: 1, 
AVGTxRATE: 1, 
MaxRxRATE: 1, 
     MaxTxRATE: 1 
    } 
    } 
    ]) 

答えて

0

これはあなたが探しているものだと思います。集約パイプラインにはいくつかの不必要なステップがあります。

$unwindは、アレイを別々のドキュメントに分割するためのフィールドで、$projectは、フィールドの形状変更や名前の変更用です。

db.u2000.aggregate([ 
    { "$match": {"CollectionTime": { $gte: ISODate("2016-11-05T00:00:00.000Z")}}}, 
    { "$group": { 
      "_id": null, 
      AVGRxRATE: { $avg: "$Rx Rate" }, 
      AVGTxRATE: { $avg: "$Tx Rate" }, 
      MaxRxRATE: { $max: "$Rx Rate" }, 
      MaxTxRATE: { $max: "$Tx Rate" } 
     } 
    } 
]) 

これはあなたの「1」の文書の場合は、以下のが、複数のドキュメントのために働く必要があり、その結果:*

{ 
    "_id" : null, 
    "AVGRxRATE" : 522, 
    "AVGTxRATE" : 176, 
    "MaxRxRATE" : NumberLong(522), 
    "MaxTxRATE" : NumberLong(176) 
} 

EDIT *

正確に取得するには、次の集計を実行しますあなたが必要とする出力...これは実際に特に何かをグループ化しているわけではなく、ヌルでグループ化しているので、あなたが求めているように1つのドキュメントを操作する方が多いことに注意してください。中

db.u2000.aggregate([ 
    { "$match": {"CollectionTime": { $gte: ISODate("2016-11-05T00:00:00.000Z")}}}, 
    { "$group": { 
      "_id": null, 
      DeviceName: { $first: "$DeviceName" }, 
      ResourceName: { $first: "$ResourceName" }, 
      Date: { $first: "$CollectionTime" }, 
      AVGRxRATE: { $avg: "$Rx Rate" }, 
      AVGTxRATE: { $avg: "$Tx Rate" }, 
      MaxRxRATE: { $max: "$Rx Rate" }, 
      MaxTxRATE: { $max: "$Tx Rate" } 
     } 
    }, 
    { 
     $project: { 
      _id: 0, 
      DeviceName: 1, 
      ResourceName: 1, 
      Date: { $dateToString: { format: "%Y-%m-%d", date: "$Date" } }, 
      AVGRxRATE: 1, 
      AVGTxRATE: 1, 
      MaxRxRATE: 1, 
      MaxTxRATE: 1 
     } 
    } 
]) 

結果:

{ 
    "DeviceName" : "OLT", 
    "ResourceName" : "OLT/Frame:0/Slot:19/Port:0", 
    "Date" : "2016-11-07", 
    "AVGRxRATE" : 522, 
    "AVGTxRATE" : 176, 
    "MaxRxRATE" : NumberLong(522), 
    "MaxTxRATE" : NumberLong(176) 
} 
+0

clarification.Every 5 mnのためのおかげで私は、ドキュメントを取得し、私の目標は、各ressource 1日(AVG、MAX)によって凝集を作ることです名前: DeviceName: "OLT" ResourceName: "OLT /フレーム:0/Slot:19/Port:0" date:2016-11-07 AVG Txレート:NumberLong( "176") AVG Rxレート: NumberLong( "522") MAX Txレート:NumberLong( "176") MAX Rxレート:NumberLong( "522") デバイス名のような日付と情報をどのように追加できますか? – lalarita

+0

どうすれば他の情報を追加して日の書式を変更できますか?@dyouberg – lalarita

+0

上記の回答を編集してください – dyouberg