我有一个名字的 mongo 数据库。
假设它看起来像这样:
{ "_id" : ObjectId("513a18c1f9e9b5c19fd80014"), "name" : "Mary Sue" }
{ "_id" : ObjectId("513a18d9f9e9b5c19fd80015"), "name" : "Tammy Sue" }
{ "_id" : ObjectId("513a18e4f9e9b5c19fd80016"), "name" : "Sueellen" }
{ "_id" : ObjectId("513a18eaf9e9b5c19fd80017"), "name" : "Ellen" }
{ "_id" : ObjectId("513a195af9e9b5c19fd80018"), "name" : "Sue" }
{ "_id" : ObjectId("513a1ccaf9e9b5c19fd80019"), "name" : "Eddie" }
我希望能够对单个结果执行(不区分大小写)查询,该查询将优先考虑返回值,如下所示:
如果“name”以我的字符串开头,则返回第一个按字母顺序排列的“starts with”结果。
否则,如果 name包含我的字符串,则返回第一个字母结果。
示例:
搜索/sue/i
应返回“Sue”。
搜索/e/i
应返回“Eddie”。
搜索/len/i
应返回“艾伦”。
搜索/ue/i
应返回“Mary Sue”。
是否可以在不进行 2 次单独调用(一个 for /^len/i
,然后/len/i
如果我得到 0 个结果)或查找每个匹配项并自己解析结果的情况下执行此操作?
我碰巧在这里使用了 node.js 和 mongoose,但是一个通用的 mongo 答案也可以,所以我可以理解这些概念。