Regex 根据正则表达式对Mongodb find()输出进行排序
上面的mongodb查询以下面的格式从DB返回数据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})修改查询, 然后它回来了 没有 请告诉我应该使用哪个查询来获取我所期望的序列。我不知道如何使用查找(),但您可以使用聚合() 首先,将正则表达式用于$
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}
}