首页 > 解决方案 > 计算 $or 在 MongoDB 中满足的查询数

问题描述

有没有办法搜索集合中的所有文档,并根据它们匹配的查询数量对它们进行排序?

即顶部匹配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
}]

regex /.*m.*/检查查询 1: 、查询 2:后的示例输出18 < age < 24

[{
    'name': 'matt',
    'age': 19,
    'matched': 2
},
{
    'name': 'bob',
    'age': 19,
    'matched': 1
},
{
    'name': 'mark',
    'age': 25,
    'matched': 1
}]

马特是第一个,因为他满足了这两个问题。

标签: mongodbmongodb-queryaggregation-framework

解决方案


推荐阅读