Mongo查找并排名结果

时间:2015-06-24 13:13:24

标签: mongodb

我有一个mongo集合,其文档类似于下面的架构。我有一个用户可以过滤属性的UI(使用逻辑或)。由于它使用OR我希望对结果进行排序,以便我首先得到与大多数过滤器匹配的结果。例如:如果我对作者“auth1”和“tag1”进行过滤,则会返回两个记录,但第二个记录位于顶部。在这个例子中,我只有2个attr来过滤,但是大约有20个。

您对解决此问题的最佳方法有什么建议吗?我正在考虑编写map-reduce查询来计算“匹配等级”。

{name: "bookName", tags:["tag1"], authors: [] }
{name: "bookName2", tags:["tag1", "tag2"], authors: ["auth1", "auth2"] }

2 个答案:

答案 0 :(得分:-1)

如果我理解你的问题,你想要对结果进行排序by authors.length和tags.length。

使用sort()的问题,在MongoDB(我在2.6上测试)中,不可能按两个并行数组进行排序。您可以按album.length或tags.length排序,但不能同时排序。

// sort By max to min authors
db.getCollection('rank').find({}).sort({ authors : -1 });
// sort by max to min tags
db.getCollection('rank').find({}).sort({ tags : -1 });

如果您按两种方式对结果进行排序,则应使用聚合框架。你在这里有一个很好的解释:https://stackoverflow.com/a/9040269/1506914

答案 1 :(得分:-1)

可以使用聚合框架。看看this question,它与你的相似。