我正在尝试用大型mongoDb自学mongoDB (每个文档大约有10 of,总共有1000个文档)
我想试试一些基本的东西。例如,列出通过UsedCallories对所有用户进行排序的每个活动。
db.getCollection('users').aggregate([
{$group: {_id:"$Activities"}},
{$sort: { UsedCallories: -1}}
],{allowDiskUse:true});
不幸的是,当我执行这个脚本时,它给了我:“成功执行的脚本,但是没有显示结果。”
你能给我一个指针吗?我错了?
缩短的示例文件:
{
"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上排序。
"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
})
现在返回按用户分组的所有活动,我希望只列出所有这些活动的列表,而不是按用户分组。
发布于 2016-11-04 15:00:04
谢谢@chridam。加上我的评论作为回答。
db.getCollection('users').aggregate([{
$unwind: "$Activities"
}, {
$sort: {
"Activities.UsedCallories": -1
}
}, {
$group: {
_id: null,
Activities: {
$push: "$Activities"
}
}
}, {
$project: {
_id: 0,
Activities: 1
}
}], {
allowDiskUse: true
});
https://stackoverflow.com/questions/40424020
复制相似问题