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

Pymongo查询范围值错误:如何过滤value1_gpu在2-8内的数据

MongoDB聚合查询修正:获取eu-1区域最新数据并过滤value1_gpu范围

问题分析

你的原查询存在关键问题:$match阶段中对data.value1_gpu的范围筛选,只会匹配包含至少一个符合条件元素的整个文档,并不会过滤数组内不符合条件的元素。因此在$unwind展开数组后,像Mary那条value1_gpu=12的记录仍然会被保留,最终分组结果出现超出范围的值。

正确的聚合查询

mongo.instances.aggregate([
    # 匹配region为eu-1的文档
    {"$match": {"metadata.region": "eu-1"}},
    # 按Date降序排序,取最新的一条文档
    {"$sort": {"Date": -1}},
    {"$limit": 1},
    # 展开data数组
    {"$unwind": "$data"},
    # 过滤data数组中value1_gpu在2-8之间的元素
    {"$match": {"data.value1_gpu": {"$gte": 2, "$lte": 8}}},
    # 按data.created_date降序,确保分组时取到最新记录
    {"$sort": {"data.created_date": -1}},
    # 按data.name分组,保留最新记录的字段
    {"$group": {
        "_id": "$data.Name",
        "latest_created_date": {"$first": "$data.created_date"},
        "value1_gpu": {"$first": "$data.value1_gpu"},
        "Value3": {"$first": "$data.Value3"}
    }}
])

关键修正点

  • 将data.value1_gpu的范围筛选从初始$match移到$unwind之后,精准过滤数组中不符合条件的元素。
  • 新增对data.created_date的降序排序,确保分组时$first取到的是每个name组内的最新记录。

预期结果

执行后会得到eu-1区域最新文档(ID=0)中符合value1_gpu范围的分组数据:

  • Chris:value1_gpu=2,latest_created_date=2011-04-03
  • David:value1_gpu=8,latest_created_date=2011-04-02

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:30:50