是否可以搜索集合中的所有文档,并根据它们匹配的查询量对其进行排序?
即顶部匹配10个查询的文档,底部匹配1的文档
我一直在尝试通过聚合管道来实现这一目标,但是我被困住了。
例如,说我想搜索18至24岁之间的用户,并使用正则表达式检查字符串是否存在:
db.users. aggregate({
"$match": {
'$or': [
{
"name": /.*m.*/
},
{
'age': {
'$gt': 18,
'$lt': 24
}
}
]
}
...
不过,我不知道该走哪一步
任何帮助将不胜感激
编辑:
这是一个样本集合:
users = [{
'name': 'bob',
'age': 19
},
{
'name': 'susan',
'age': 16
},
{
'name': 'mark',
'age': 25
},
{
'name': 'matt',
'age': 19
}]
检查查询1:regex /.*m.*/
,查询2:18 < age < 24
之后的示例输出:
[{
'name': 'matt',
'age': 19,
'matched': 2
},
{
'name': 'bob',
'age': 19,
'matched': 1
},
{
'name': 'mark',
'age': 25,
'matched': 1
}]
Matt是第一位,因为他满足了两个查询。