在多个字段上对mongodb查询进行排序

时间:2018-10-25 16:49:23

标签: mongodb nosql mongodb-query

我想对搜索博客的mongodb查询进行排序。

以下是Blogger的文档结构(简化):

{
  posts : {
    hashtags : [{
      hashtag : String,
      weight  : Number
    }]
  },
  globalMark : Number
}

人们可以通过输入文本来搜索博客。例如:他们可以写“时尚旅行”,然后点击搜索按钮。

作为结果,我希望显示Blogger的帖子中包含与/ fashion / i和/ travel / i匹配的主题标签(按相关性排序)。相关性取决于globalMark和hashtag的权重。

我知道如何显示它们跳过标签的权重,但不知道如何在我的查询中包括该权重。...

这是我当前的查询:

Blogger.find({
  "$and" : [{
    "posts.hashtags.hashtag" : {$regex: /fashion/i}
  }, {
    "posts.hashtags.hashtag" : {$regex: /travel/i}
  }]
})
.sort("-globalMark")

如何处理这个重量? 非常感谢!

2 个答案:

答案 0 :(得分:0)

首先考虑:MongoDB不是用于类似操作符的搜索(如果您的数据很大,则会有一些延迟)。 再想一想:hashtags值需要是数组中的一个或多个对象 第三:可以使用

db.collectionName.find({
    $and: [
        {"posts.hashtags.hashtag" : {$regex: /fashion/i}},
        {"posts.hashtags.hashtag" : {$regex: /travel/i}}
    ]
}).sort({
    globalMark: 1, "posts.hashtags.weight": 1
})

答案 1 :(得分:0)

我已经使用mongodb聚合和$ project管道阶段实现了它。基本上$ project可以让您修改结果文档,因此我用它来构建有关不同字段的分数,然后根据该构建分数对汇总进行排序。

这是文档: https://docs.mongodb.com/manual/reference/operator/aggregation/project/