首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >大型文档上的MongoDB聚合

大型文档上的MongoDB聚合
EN

Stack Overflow用户
提问于 2016-11-04 13:34:09
回答 1查看 3.6K关注 0票数 0

我正在尝试用大型mongoDb自学mongoDB (每个文档大约有10 of,总共有1000个文档)

我想试试一些基本的东西。例如,列出通过UsedCallories对所有用户进行排序的每个活动。

代码语言:javascript
运行
复制
db.getCollection('users').aggregate([
  {$group: {_id:"$Activities"}}, 
  {$sort: { UsedCallories: -1}}
],{allowDiskUse:true});

不幸的是,当我执行这个脚本时,它给了我:“成功执行的脚本,但是没有显示结果。”

你能给我一个指针吗?我错了?

缩短的示例文件:

代码语言:javascript
运行
复制
{
  "Id": 1,
  "FirstName": "Casie",
  "LastName": "Crapo",
  "Email": "Casie.Crapo@databanken.db",
  "Weight": 92,
  "Length": 198,
  "Activities": [
    {
      "ActivityType": {
        "Name": "Sexual Activity",
        "CallPerSecond": 0.033333333
      },
      "StartCoordinates": {
        "Lattidude": -10.81907,
        "Longitude": -16.16832
      },
      "EndCoordinates": {
        "Lattidude": -10.81907,
        "Longitude": -16.16832
      },
      "StartDateTime": { $date: "2016-11-01T23:39:15Z" },
      "EndDateTime": { $date: "2016-11-02T02:38:45Z" },
      "UsedCallories": 772.63042705630426,
      "Measurements": [
        {
          "Heartrate": 142,
          "UnderPressure": 123,
          "Overressure": 156,
          "Speed": 0,
          "Coordinates": {
            "Lattidude": -10.81907,
            "Longitude": -16.16832
          }
        }
      ]
    }
  ]
}

更新'ExpectedOutput':

因此,预期的输出只是来自用户的所有数组字段中所有活动的列表。在UsedCallories上排序。

代码语言:javascript
运行
复制
"Activities": [
    {
      "ActivityType": {
        "Name": "Sexual Activity",
        "CallPerSecond": 0.033333333
      },
      "StartCoordinates": {
        "Lattidude": -10.81907,
        "Longitude": -16.16832
      },
      "EndCoordinates": {
        "Lattidude": -10.81907,
        "Longitude": -16.16832
      },
      "StartDateTime": { $date: "2016-11-01T23:39:15Z" },
      "EndDateTime": { $date: "2016-11-02T02:38:45Z" },
      "UsedCallories": 772.63042705630426,
      "Measurements": [
        ...
      ]
    },{
      "ActivityType": {
        "Name": "Sexual Activity",
        "CallPerSecond": 0.033333333
      },
      "StartCoordinates": {
        "Lattidude": -10.81907,
        "Longitude": -16.16832
      },
      "EndCoordinates": {
        "Lattidude": -10.81907,
        "Longitude": -16.16832
      },
      "StartDateTime": { $date: "2016-11-01T23:39:15Z" },
      "EndDateTime": { $date: "2016-11-02T02:38:45Z" },
      "UsedCallories": 52.63042705630426,
      "Measurements": [
        ...
      ]
    },{
      "ActivityType": {
        "Name": "Sexual Activity",
        "CallPerSecond": 0.033333333
      },
      "StartCoordinates": {
        "Lattidude": -10.81907,
        "Longitude": -16.16832
      },
      "EndCoordinates": {
        "Lattidude": -10.81907,
        "Longitude": -16.16832
      },
      "StartDateTime": { $date: "2016-11-01T23:39:15Z" },
      "EndDateTime": { $date: "2016-11-02T02:38:45Z" },
      "UsedCallories": 20.22442,
      "Measurements": [
        ...
      ]
    }
  ]

重复问题后的更新

好的,谢谢你对重复帖子的引用。不过,这不是同一个问题。

我设法用其中的一些来获得一些结果。查询更改为:

代码语言:javascript
运行
复制
db.getCollection('users').aggregate([
    {$unwind: '$Activities'}, 
    {$sort: {'Activities.UsedCallories': -1}}, 
    {$group: {_id: '$_id', 'Activities': {$push: '$Activities'}}}
    ], {
  allowDiskUse:true
 })

现在返回按用户分组的所有活动,我希望只列出所有这些活动的列表,而不是按用户分组。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-04 15:00:04

谢谢@chridam。加上我的评论作为回答。

代码语言:javascript
运行
复制
db.getCollection('users').aggregate([{
    $unwind: "$Activities"
}, {
    $sort: {
        "Activities.UsedCallories": -1
    }
}, {
    $group: {
        _id: null,
        Activities: {
            $push: "$Activities"
        }
    }
}, {
    $project: {
        _id: 0,
        Activities: 1
    }
}], {
    allowDiskUse: true
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40424020

复制
相关文章

相似问题

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