Mongodb正则表达式查询

Mongodb正则表达式查询,mongodb,indexing,pymongo,Mongodb,Indexing,Pymongo,我使用Mongodb存储世界各地的位置列表,记录超过200万条。每个记录都是如下所示的对象: { "_id" : ObjectId("4e5b339feee76320ab26f930"), "city" : "New York", "longitude" : -87.2008333, "latitude" : 30.8383333, "country_code" : "US", "country_name" : "United States" } 我想进行搜索,找出所有包含“纽约”的“城市”,

我使用Mongodb存储世界各地的位置列表,记录超过200万条。每个记录都是如下所示的对象:

{ "_id" : ObjectId("4e5b339feee76320ab26f930"), "city" : "New York", "longitude" : -87.2008333, "latitude" : 30.8383333, "country_code" : "US", "country_name" : "United States" }
我想进行搜索,找出所有包含“纽约”的“城市”,我花了大约10秒钟才得到结果(这在我的网络系统中是不可接受的)。我已经使用ensureIndex()函数为“city”编制了索引,但查询速度仍然很慢

我的问题是:

db.locations.find({"city": { "$regex": "(New York)", "$options": 'i' }})
我想问题在于“正则表达式”。你能给我一个解决方案,让我在2-3秒内得到查询结果吗(我在MySQL中有超过4M条记录,类似的查询只花了我1-2秒——带索引)


感谢和问候。

如果不使用regexp或javascript,就无法在mongodb中使用contain操作进行搜索(它们很慢,因为没有索引)


我可以建议以小写形式存储其他城市,并通过完全匹配进行搜索。如果你想要“包含”和更快的速度,你应该使用其他一些全文搜索引擎,如或。

我建议使用多键

例如:

{ title : "this is fun" ,
  _keywords : [ "this" , "is" , "fun" ]
}
然后你可以用

 db.articles.findOne( { _keywords: "this" } )

这将更快

Mongo在搜索时不区分大小写,不使用regexp索引。我建议您将字段存储为大写或小写,并将其用于搜索

而不是搜索包含如果你搜索开始如下

db.locations.find({“城市”:{“$regex”:/^New York/})
您的查询将很快返回

更多信息