2016-11-04 47 views
0

我试图自我学习与大的MongoDB MongoDB中(每个文档约为10Mb的共1000个文档)MongoDB的总结上巨大的文件

我想尝试一些基础知识。例如列出所有用户对UsedCallories进行排序的每个Activity。

db.getCollection('users').aggregate([ 
    {$group: {_id:"$Activities"}}, 
    {$sort: { UsedCallories: -1}} 
],{allowDiskUse:true}); 

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

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

缩短示例文件:

{ 
    "Id": 1, 
    "FirstName": "Casie", 
    "LastName": "Crapo", 
    "Email": "[email protected]", 
    "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上。之后重复的问题

好感谢的参考副本后

"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": [ 
     ... 
     ] 
    } 
    ] 

更新。但这不是同一个问题。

我设法使用它来获得一些结果。 查询改为:

db.getCollection('users').aggregate([ 
    {$unwind: '$Activities'}, 
    {$sort: {'Activities.UsedCallories': -1}}, 
    {$group: {_id: '$_id', 'Activities': {$push: '$Activities'}}} 
    ], { 
    allowDiskUse:true 
}) 

至极现在返回所有分组方式,用户的活动,我宁愿只是一个所有不被用户

+0

尝试{$ unwind:“$ Activities”}在分组之前进入管道。 – Veeram

+0

@Veeram我试过了,它仍然给出相同的信息。 'db.getCollection( '用户')合计([ {$开卷: “$活动”},{ $组:{_id: “$活动”}},{ $排序:{UsedCallories: -1}}],{ allowDiskUse:true })' – Kieken72

+0

您能添加预期的输出吗? – Veeram

回答

0

感谢@chridam分组这些活动的列表。添加我的评论作为答案。

db.getCollection('users').aggregate([{ 
    $unwind: "$Activities" 
}, { 
    $sort: { 
     "Activities.UsedCallories": -1 
    } 
}, { 
    $group: { 
     _id: null, 
     Activities: { 
      $push: "$Activities" 
     } 
    } 
}, { 
    $project: { 
     _id: 0, 
     Activities: 1 
    } 
}], { 
    allowDiskUse: true 
}); 
+0

谢谢,它正在工作,虽然我遇到了'BufBuilder试图增长()到134217728字节,超过64MB限制的问题。“但那将是另一个问题。我暂时将查询限制为100条记录! – Kieken72