MongoDB聚合:排序结果不正确

时间:2015-06-15 17:36:48

标签: mongodb

我正在研究以下格式的集合:

        <div id="hover">hover</div>
    <div id="pinboard-container">
        <div id="pinboard"></div>
    </div>

我写了一个查询来计算平均评分。除此之外,我的查询还应返回评级字段(最新评级应首先出现)。

{_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
                    }
                }]
);

我认为小组重新排序信息,所以我尝试在$ group子句后添加排序条件,但是徒劳无功。

"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"
}, 

1 个答案:

答案 0 :(得分:0)

问题似乎是您正在尝试对一组文档进行排序,其中$sort仅对根文档有效。

对于$unwind运算符来说,这可能是一个很好的例子,你最终会得到很多根文档,每个文档都有这样的格式:

{
    avg_rating: 3.8888888888888888,
    reviews: {
        "rating" : {
            "star" : 3.5000000000000000,
            "comment" : "",
            "last_updated" : ISODate("2015-06-13T20:44:05.475Z")
        },
        "uid" : "977124278982354"
    }
},
{
    avg_rating: 3.8888888888888888,
    reviews: {
        "rating" : {
            "star" : 5,
            "comment" : "",
            "last_updated" : ISODate("2015-06-13T20:44:30.109Z")
        },
        "uid" : "977124278982354"
    }
},
...

然后您应该可以在$sort

上执行reviews.rating.last_updated