在MongoDB中计算$ or满足的查询数

时间:2018-11-03 16:21:23

标签: mongodb mongodb-query aggregation-framework

是否可以搜索集合中的所有文档,并根据它们匹配的查询量对其进行排序?

即顶部匹配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是第一位,因为他满足了两个查询。

0 个答案:

没有答案