【问题标题】:mongodb, pymongo - sort matching data by another columnmongodb, pymongo - 按另一列对匹配数据进行排序
【发布时间】: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


    【解决方案1】:

    假设你的情况是一致的:

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

    假设只有美国和加拿大应该可以正常工作

    【讨论】:

    • 谢谢,它有效。不仅是美国和加拿大,我还添加了一个“优先”字段,我将此字段设置为 0(美国)和 1(其他国家/地区),并按此字段排序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 2021-12-04
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 2021-06-06
    • 2022-09-28
    相关资源
    最近更新 更多