You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB与PyMongo中结合$sort和$gt实现输出过滤与排序

解决MongoDB聚合管道过滤+排序问题

直接用$match做文档过滤,接着$sort排序,最后用$project指定输出字段即可,不需要借助$cond(它是用于字段内的条件判断,而非文档级过滤)。

正确聚合管道代码

pipeline = [
    # 1. 过滤出onix_vnr大于指定值的文档
    {
        '$match': {
            'onix_vnr': {'$gt': 'TB30_totaal_2023-05_095van101.onx'}
        }
    },
    # 2. 按onix_vnr升序排序
    {
        '$sort': {'onix_vnr': 1}
    },
    # 3. 仅保留onix_vnr字段,隐藏默认的_id
    {
        '$project': {
            '_id': 0,
            'onix_vnr': 1
        }
    }
]

# 执行聚合查询
result = db[collection].aggregate(pipeline)

关键说明

  • $match等价于SQL的WHERE子句,是聚合中做文档过滤的标准方式,直接用字段比较条件就能完成筛选,不需要绕弯用$cond。
  • 把$sort放在$match之后,只对过滤后的文档排序,能减少排序的数据量,提升性能(如果onix_vnr字段创建了索引,性能优化更明显)。
  • $project阶段用来控制输出内容,_id: 0表示不输出默认的_id字段,只保留需要的onix_vnr。

执行后得到的结果格式如下:

{'onix_vnr': 'TB30_totaal_2023-05_096van101.onx'},
{'onix_vnr': 'TB30_totaal_2023-05_097van101.onx'},
...

如果想要直接得到onix_vnr的值数组,可以在管道末尾添加$group阶段:

pipeline = [
    {'$match': {'onix_vnr': {'$gt': 'TB30_totaal_2023-05_095van101.onx'}}},
    {'$sort': {'onix_vnr': 1}},
    {'$group': {
        '_id': None,
        'onix_vnrs': {'$push': '$onix_vnr'}
    }},
    {'$project': {'_id': 0}}
]

执行后会返回包含所有符合条件值的数组:

{'onix_vnrs': ['TB30_totaal_2023-05_096van101.onx', ...]}

内容的提问来源于stack exchange,提问作者Jeex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:27:30