我有这样的文件:
{
{
name: 'The best book'
},
{
name: 'The book is the best on Sachin'
},
{
name: 'Best book on Sachin Tendulkar'
}
}
我搜索了regex mongo查询:
db.getCollection('books').find({ $in: [/sachin/i, /tendulkar/i, /best/i, /book/i]})
它正在给出结果,但根据我的要求,它应该按照最大匹配的排序顺序给出结果:
{
name: 'Best book on Sachin Tendulkar' (4 matches)
},
{
name: 'The book is the best on Sachin' (3 matches)
},
{
name: 'The best book' (2 matches)
}
我是mongo的新手。请帮我写mongo查询以获得结果。
答案 0 :(得分:1)
在这种情况下,最好的选择可能是使用聚合框架(https://docs.mongodb.com/v3.2/reference/operator/aggregation/)。 我会这样做的。
沿着这些方向的东西
db.books.aggregate([
{$match: {}},
{$project: {
name: {$toLower: "$name"},
... any other amount of fields ...
}},
{$project: {
name: true,
... any other amount of fields ...
wordArray: {$split: ["$name", " "]}
}},
{$project: {
name: true,
... any other amount of fields ...
wordArray: true,
numberOfMatches: {
$size: {
$setIntersection: ["$wordArray", ["best", "book"]]
}
}
}},
{$sort: {
numberOfMatches: -1
}}
]);
请注意,您可以将条件设置为$match: {}
,并过滤您正在分类的初始图书集。
我不确定这是否适用于正则表达式,所以我添加了第一个$ project阶段,以确保您始终将小写与小写进行比较