我正在研究以下格式的集合:
<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"
},
答案 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