MongoDB:按两个字段总和排序

8
SELECT (a+b) as c FROM my_table ORDER BY c ASC;

我该如何在Mongo中按两个列的总和排序?
2个回答

6

如果没有额外的操作,你不能轻松地完成它。

要按任何计算值排序,您需要首先将其存储在文档中或者换句话说,您需要创建额外的字段'c',并使用每次更新/插入在其中存储a + b,然后像往常一样按'c'排序。


5
这是一个非常残酷的解决方案。:( - fl00r
从工作量的角度来看,它似乎很残酷,但从性能的角度来看,它总是比任何计算都要快。 - Andrew Orsich
从 SQL 方面来看,这看起来相当残酷 :) - fl00r
1
这是数据复制:如果查询速度对您比磁盘空间更重要,那么您应该选择这个解决方案,否则,请选择MapReduce解决方案。 - kamaradclimber
1
@kamaradclimber:磁盘空间很便宜,MapReduce 是一个缓慢的过程,不建议同步使用。顺便说一下,在 NoSQL 世界中,数据复制/去规范化是一个良好的已知方法...如果可能复制某些东西,你应该首先尝试复制,只有在不可能时才使用 M/R(异步)。Mongodb 网站和任何 Mongodb 书籍都会告诉你同样的事情。 - Andrew Orsich
@andrew:你说得对,我的评论不够清晰,但我同意你的观点 :) - kamaradclimber

4
您可以像这样查询:
db.mycol.aggregate(
    [{$match:{tag:"xxx"}},
    {$project:{tag:1, count_a:1, count_b:1, factor:{$add: ["$count_a", "$count_b"]}}}, 
    {$sort:{factor:-1}}]
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接