2016-04-25 51 views
0

我有一个集合MyCollection的行中的所有数据,显示使用MongoDB的

ID DateTime    myID Cost Flag 

1 '2016-07-01T00:00:00' 2048  1 'O' 
2 '2016-07-02T00:00:00' 2049  2 'O' 

如果我写的SQL查询它

"select DateTime, myID,Flag, min(Cost) from myCollection group by DateTime, myID" 

它会显示数据,例如所有字段

DateTime, myID,Flag, min(Cost) 

但在蒙戈聚合框架我可以组像

db.myCollection.aggregate([ 
    { 
     $group: { 
      _id: { 
       DateTime: '$DateTime', 
       myID: '$myID' 
      }, 
      minCost: { $min: '$Cost' } 
     } 
    } 
]) 

将返回我

DateTime, myID, min(Cost) 

,但我需要"Flag"场也在单一的查询。我尝试了$Push,但它只适用于数组。因为列Flag在聚合函数或GROUP BY子句中不包含

回答

1

在SQL Server中,查询

select DateTime, myID,Flag, min(Cost) from myCollection group by DateTime, myID 

在选择列表中无效。

在MongoDB中,能够包含在汇总查询领域Flag,你必须在球场上适用的蓄电池运营商在这种情况下,你既可以使用$first$last蓄电池运营商返回聚合内的字段值。

db.myCollection.aggregate([ 
    { 
     "$group": { 
      "_id": { 
       "DateTime": '$DateTime', 
       "myID": '$myID' 
      }, 
      "minCost": { "$min": '$Cost' }, 
      "Flag": { "$first": '$Flag' } 
     } 
    } 
]) 
在上述

,所述$first累加器操作者施加上标志字段将从各组的第一文档返回Flag值。订单仅在文档按照定义的顺序定义时才被定义。