【发布时间】:2014-12-02 16:10:42
【问题描述】:
在像books : [{ stars: 10, valid: true }, { stars: 24, valid: false }, { stars: 76, valid: true }, ...] 这样的集合中,计算平均值很简单:
db.books.aggregate([
{ $match : {
valid: true
}},
{ $group : {
_id: null,
avg: { $avg: "$stars" } // <- How calculate $avg of top 20%?
}}
])
但是,如果我想要前 20% 的明星平均值而不是所有明星的平均值?
PS:不知道collection(valid: true) size,因为不像我的例子,我执行了很多$unwind
OBS:
> db.version()
2.4.10
【问题讨论】:
-
前 20% 是什么意思?根据
star属性值排名前 20% 的明星,还是valid属性为 true 的集合中排名前 20% 的记录?
标签: mongodb mongoid mongomapper