0
我正在以下格式的集合:MongoDB的總結:不正確的排序結果
{_id:"blah"
"rating" : {
"star" : "3.0",
"comment" : "",
"last_updated" : ISODate("2015-06-13T17:57:23.176Z")
}
}
我寫了一個查詢來計算平均收視率。隨着這個我的查詢也應該返回評級領域(最新的評級應該先出現)。
db.collection('reviews').aggregate(
[{
$match: {
$and: [{
"res_id": resID
}, {
"rating.star": {
$gt: 1
}
}]
}
}, {
$sort: {
"rating.last_updated": -1
}
}, {
"$group": {
"_id": null,
avg_rating: {
"$avg": "$rating.star"
},
"reviews": {
"$addToSet": {
rating: "$rating",
uid: "$uid",
items: "$items"
}
},
"uids": {
"$addToSet": "$uid"
}
}
}, {
"$project": {
"reviews": 1,
"avg_rating": 1,
"uids": 1
}
}]
);
返回的平均數是正確的,但是評論信息並非按時間遞減的順序排列。
"avg_rating" : 3.8888888888888888,
"reviews" : [
{
"rating" : {
"star" : 3.5000000000000000,
"comment" : "",
"last_updated" : ISODate("2015-06-13T20:44:05.475Z")
},
"uid" : "977124278982354"
},
{
"rating" : {
"star" : 5,
"comment" : "",
"last_updated" : ISODate("2015-06-13T20:44:30.109Z")
},
"uid" : "977124278982354"
},
我認爲小組重新排序信息,所以我嘗試在$ group子句後添加排序條件,但徒勞無功。
{
$group:....
},{
$sort: {
"rating.last_updated": -1
}
},{
"$project": {
"reviews": 1,
"av