【发布时间】:2014-10-13 18:16:05
【问题描述】:
我有一个这样格式的集合:
Location {
'id' : ObjectID,
'location' : string,
'country' : string
}
我想匹配“位置”字段中包含某个子字符串的文档,我只需要 20 个匹配项,并且我希望具有等于美国的“国家”字段的位置排在第一位(我的意思是这是:如果我有 15 个符合我的标准的美国地点和 15 个符合我的标准的加拿大地点,我想在结果中包括所有 15 个美国地点和 5 个加拿大地点;如果我有超过 20 个美国符合我的条件的位置,而不是我只想在结果中包含美国位置)。
我知道这可以通过进行 2 次查询(首先搜索美国的位置,然后在世界其他地区)或通过一个查询检索所有符合我的条件的文档,然后过滤来轻松完成int 它适用于美国位置,但我认为这不是最快的解决方案。
现在,我只是按照我的标准匹配文档,忽略国家,在 pymongo 中使用这个命令:
reg_ex = '(?i).*' + substringCriteria + '.*'
result = db['Location'].find({ 'location' : { '$regex' : reg_ex } }).limit(20)
我认为“限制”部分使我的查询更快(我认为 MongoDB 只是在达到 20 时停止搜索更多匹配项),所以如果这是真的,有什么办法可以用它来解决我前面提到的有问题吗?
【问题讨论】:
标签: python regex mongodb pymongo database