Mongodb Mongo查找和排序结果

Mongodb Mongo查找和排序结果,mongodb,Mongodb,我有一个mongo集合,其中的文档与下面的模式类似。我有一个用户界面,用户可以从中过滤属性(使用逻辑or)。因为它使用了OR,所以我希望对结果进行排序,以便首先得到与大多数过滤器匹配的结果。例如:如果我对作者“auth1”和“tag1”进行筛选,我将返回两条记录,但第二条记录位于顶部。在这个例子中,我只有2个attr要过滤,但是大约有20个 你对解决这个问题的最佳方法有什么建议吗?我正在考虑编写一个map reduce查询来计算“匹配排名” 如果我理解您的问题,您希望按authors.lengt

我有一个mongo集合,其中的文档与下面的模式类似。我有一个用户界面,用户可以从中过滤属性(使用逻辑or)。因为它使用了OR,所以我希望对结果进行排序,以便首先得到与大多数过滤器匹配的结果。例如:如果我对作者“auth1”和“tag1”进行筛选,我将返回两条记录,但第二条记录位于顶部。在这个例子中,我只有2个attr要过滤,但是大约有20个

你对解决这个问题的最佳方法有什么建议吗?我正在考虑编写一个map reduce查询来计算“匹配排名”


如果我理解您的问题,您希望按authors.length和tags.length对结果进行排序

问题是,在MongoDB(我在2.6上测试)中,使用
sort()
,不可能按两个并行数组进行排序。您可以按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 });

如果您想按这两种方法对结果进行排序,则应使用聚合框架。这里有一个很好的解释:

使用聚合框架是可能的。请看一看,它与您的类似。

我并没有试图根据数组的长度进行排序。我需要排序,这样当我搜索tag1 tag2和auth1时,我会返回两条记录,但bookname2位于顶部,因为它在所有3个过滤器上都匹配。Bookname1将位于底部,因为它与tag1匹配。希望这更有意义
// 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 });