Regex 根据正则表达式对Mongodb find()输出进行排序

Regex 根据正则表达式对Mongodb find()输出进行排序,regex,mongodb,sorting,Regex,Mongodb,Sorting,上面的mongodb查询以下面的格式从DB返回数据 db.restaurant_info.find({name:/pi/i}) 但是,此查询将用于自动填充,因此如果我在搜索文本字段中使用pi,则所有以pi开头的记录都应位于其他记录之前,例如,我期望的顺序: 如果我使用db.restaurant\u info.find({name:/^pi/I})修改查询, 然后它回来了 没有 请告诉我应该使用哪个查询来获取我所期望的序列。我不知道如何使用查找(),但您可以使用聚合() 首先,将正则表达式用于$

上面的mongodb查询以下面的格式从DB返回数据

db.restaurant_info.find({name:/pi/i})
但是,此查询将用于自动填充,因此如果我在搜索文本字段中使用
pi
,则所有以
pi
开头的记录都应位于其他记录之前,例如,我期望的顺序:

如果我使用
db.restaurant\u info.find({name:/^pi/I})
修改查询, 然后它回来了

没有


请告诉我应该使用哪个查询来获取我所期望的序列。

我不知道如何使用查找(),但您可以使用聚合()

首先,将正则表达式用于$match,然后将$project$substring$eq一起使用,以投影一个字段,指示是否有前缀匹配。然后可以使用该字段对结果进行排序。这里有一个例子。我还使用了$toLower,因此排序不区分大小写

Kai pi
Crispi Chicken
Pizza hut
Pizza and pasta
Pita house
Kai pi
Crispi chicken
Pizza hut
Pizza and pasta
Pita house
Kai pi
Crispi Chicken
{
    $match: {
        name:/pi/i
    }
}, 
{
    $project: {
        name:true,
        regex_match: {
            $eq: [
                "pi", 
                { $substr: [ {$toLower: "$name"}, 0, 2 ] }
            ]
        }

    }
}, 
{
    $sort: {regex_match:-1}
}