mongodb,pymongo - 按另一列排序匹配数据

时间:2014-08-20 11:45:59

标签: python regex mongodb pymongo database

我有这种格式的集合:

Location {
    'id' : ObjectID,
    'location' : string,
    'country' : string
}

我希望匹配“'位置”中包含某个子字符串的文档。我只需要20场比赛,而且我希望这些地点位于' country'等于美国的第一个领域(我的意思是:如果我有15个美国地点符合我的标准,15个加拿大地点符合我的标准,我想要包括所有15个美国地点和5个结果中的加拿大位置;如果我有超过20个符合我标准的美国位置,那么我想在我的结果中仅包括美国位置。

我知道这可以通过进行2次查询(首先在美国搜索位置,然后在世界其他地方搜索),或者通过一个查询检索符合我的条件的所有文档,然后过滤来轻松完成对于美国的位置,我认为这不是最快的解决方案。

目前,我只是按照我的标准匹配文档,忽略了国家,在pymongo中使用此命令:

reg_ex = '(?i).*' + substringCriteria + '.*'
result = db['Location'].find({ 'location' : { '$regex' : reg_ex } }).limit(20)

我认为限制' part让我的查询更快(我认为MongoDB只是在达到20时停止搜索更多匹配),所以如果这是真的,有什么办法可以用它来解决我上面提到的问题吗?

1 个答案:

答案 0 :(得分:1)

假设您的案例一致:

db.location.find({'location':{$regex:'blah'}}).sort({'country':-1}).limit(20)

如果它只是美国和加拿大,应该可以正常工作