我想对搜索博客的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")
如何处理这个重量? 非常感谢!
答案 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/