我有一个名称的mongo数据库。在mongodb中查找一个文件,偏好“开始于”
比方说,它看起来像这样:
{ "_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" }
我希望能够为单个结果将返回值优先考虑像这样执行(不区分大小写)查询:
如果“名字“以开头,然后返回第一个按字母顺序排列的”开头“结果。
否则,如果名称包含我的字符串,则返回第一个按字母顺序排列的结果。
示例:
搜索/sue/i
应返回“Sue”。
搜索/e/i
应返回“Eddie”。
搜索/len/i
应返回“Ellen”。
搜索/ue/i
应返回“Mary Sue”。
是否有可能做到这一点没有任何做2个独立的电话(一个用于/^len/i
,然后/len/i
,如果我得到0的结果),或发现每场比赛和解析结果自己?
我碰巧在这里使用了node.js和mongoose,但通用的mongo答案也可以,所以我可以理解这些概念。
没有,真的没有,因为我相信你想要的,找到最佳匹配(开始正好与),如果没有最佳匹配,找到“确定”匹配。第二次搜索将非常密集,因为所有名字都需要匹配(而第一次可能会使用索引)。就性能而言,这种类型的搜索可能对全文搜索引擎更好。也许。 :) – WiredPrairie 2013-03-08 19:23:17
对于这个项目我不关心性能。名称的范围足够小,以便进行“全面”搜索,并在客户端以编程方式进行搜索,这很好。但我认为可能会出现某种地图缩减或聚合技巧,或者甚至是我想要做的事情的“名称”。我一般还在学习数据库术语(并从nosql数据库开始,这可能很奇怪......) – Josh 2013-03-08 23:50:39