2

我有一个名字的 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 答案也可以,所以我可以理解这些概念。

4

1 回答 1

-1

这只是正确的正则表达式的问题。您可以在一个正则表达式中指定多个匹配项。值得一看http://regex.learncodethehardway.org/book/并深入了解正则表达式。或者从 www.mongodb.org 下载 2.4 并尝试新的文本索引选项

http://docs.mongodb.org/manual/release-notes/2.4/#text-indexes

于 2013-03-15T08:24:16.540 回答