db.restaurant_info.find({name:/pi/i})
以上mongodb查询以DB格式返回数据
{
"_id" : ObjectId("579cf26204aba69a41da82ad"),
"name" : "pizza hut",
"type" : "restaurant"
}
/* 2 */
{
"_id" : ObjectId("579cf26204aba69a41da82af"),
"name" : "Kai pi",
"type" : "restaurant"
}
/* 3 */
{
"_id" : ObjectId("579cf26404aba69a41da82c7"),
"name" : "pizza and pasta",
"type" : "restaurant"
}
/* 4 */
{
"_id" : ObjectId("579cf26504aba69a41da82d0"),
"name" : "Crispi chicken",
"type" : "restaurant"
}
/* 5 */
{
"_id" : ObjectId("579cf26504aba69a41da82d1"),
"name" : "Pita house",
"type" : "restaurant"
}
但是,此查询将用于自动填充,因此如果我在搜索文本字段中使用pi
,则所有以pi
开头的重新记录应该出现在其他记录之前,例如序列我是期待:
Pizza hut Pizza and pasta Pita house Kai pi Crispi chicken
如果我使用db.restaurant_info.find({name:/^pi/i})
修改查询,
然后它返回
Pizza hut Pizza and pasta Pita house
不
Kai pi Crispi Chicken
请指导我应该使用哪个查询来获得我期望的序列。
答案 0 :(得分:0)
我不知道如何使用 find()执行此操作,但您可以使用 aggregate()执行此操作。
首先,您将正则表达式用于 $ match ,然后您可以将 $ project 与 $ substring 和 $一起使用eq 投影一个字段,指示您是否有前缀匹配。然后,您可以使用该字段对结果进行排序。这是一个例子。我还使用了 $ toLower ,这样您的排序就会不区分大小写。
{
$match: {
name:/pi/i
}
},
{
$project: {
name:true,
regex_match: {
$eq: [
"pi",
{ $substr: [ {$toLower: "$name"}, 0, 2 ] }
]
}
}
},
{
$sort: {regex_match:-1}
}