我有一个收藏的myCollection
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)但在mongo聚合框架中,我可以像这样分组
db.myCollection.aggregate([
{
$group: {
_id: {
DateTime: '$DateTime',
myID: '$myID'
},
minCost: { $min: '$Cost' }
}
}
])它会返回给我
DateTime, myID, min(Cost) 但我也需要在单个查询的"Flag"字段。我尝试过$Push,但它只适用于数组。
发布于 2016-04-25 15:57:17
在SQL Server中,查询
select DateTime, myID,Flag, min(Cost) from myCollection group by DateTime, myID在选择列表中无效,因为聚合函数或GROUP BY子句中均未包含列Flag。
在MongoDB中,为了能够在聚合查询中包括字段Flag,必须对字段应用累加器运算符,在这种情况下,可以使用或累加器运算符返回聚合中的字段值。
db.myCollection.aggregate([
{
"$group": {
"_id": {
"DateTime": '$DateTime',
"myID": '$myID'
},
"minCost": { "$min": '$Cost' },
"Flag": { "$first": '$Flag' }
}
}
])在上面的代码中,对Flag字段应用的累加器运算符将返回每个组的第一个文档中的Flag值。只有当文档按定义的顺序排列时,才会定义顺序。
https://stackoverflow.com/questions/36834106
复制相似问题