首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mongodb显示一行中的所有数据

使用mongodb显示一行中的所有数据
EN

Stack Overflow用户
提问于 2016-04-25 15:12:55
回答 1查看 121关注 0票数 0

我有一个收藏的myCollection

代码语言:javascript
复制
ID    DateTime              myID   Cost   Flag

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

如果我为它编写sql查询

代码语言:javascript
复制
"select DateTime, myID,Flag, min(Cost) from myCollection group by DateTime, myID"

它将显示数据中的所有字段,例如

代码语言:javascript
复制
  DateTime, myID,Flag, min(Cost)

但在mongo聚合框架中,我可以像这样分组

代码语言:javascript
复制
db.myCollection.aggregate([
    {
        $group: {
            _id: {
                DateTime: '$DateTime',
                myID: '$myID'
            },
            minCost: { $min: '$Cost' }
        }
    }
])

它会返回给我

代码语言:javascript
复制
DateTime, myID, min(Cost) 

但我也需要在单个查询的"Flag"字段。我尝试过$Push,但它只适用于数组。

EN

回答 1

Stack Overflow用户

发布于 2016-04-25 15:57:17

在SQL Server中,查询

代码语言:javascript
复制
select DateTime, myID,Flag, min(Cost) from myCollection group by DateTime, myID

在选择列表中无效,因为聚合函数或GROUP BY子句中均未包含列Flag

在MongoDB中,为了能够在聚合查询中包括字段Flag,必须对字段应用累加器运算符,在这种情况下,可以使用或累加器运算符返回聚合中的字段值。

代码语言:javascript
复制
db.myCollection.aggregate([
    {
        "$group": {
            "_id": {
                "DateTime": '$DateTime',
                "myID": '$myID'
            },
            "minCost": { "$min": '$Cost' },
            "Flag": { "$first": '$Flag' }
        }
    }
])

在上面的代码中,对Flag字段应用的累加器运算符将返回每个组的第一个文档中的Flag值。只有当文档按定义的顺序排列时,才会定义顺序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36834106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档