当前位置: 首页 > 知识库问答 >
问题:

我可以在MongoDB聚合框架上使用2个以上的字段$sort吗?

於宏大
2023-03-14

使用下面的PyMongo查询。我使用了Mongo网上研讨会的一些技巧,他们建议使用_id字段来存储时间戳,以提高性能和内存使用。

cursor = db.dados_meteo_reloaded.aggregate( [
{
    "$match": {
        "_id": {
        "$gte": "0001:20120901",
        "$lte": "0001:20140215"
    },
        "TMP": {
            "$lt": 7.2
    }
    }
    },
    {
"$project": {
    "year": {
        "$substr": [
            "$_id",
            5,
            4
        ]
    },
    "month": {
        "$substr": [
            "$_id",
            9,
            2
        ]
    },

            "day": {
        "$substr": [
            "$_id",
           11,
            2
        ]
    }
}
},
  {
 "$group": {
    "_id": {"year":"$year","month":"$month","day":"$day"},
    "frio": {
        "$sum": 0.25
    }
}
},
    {"$sort":{"_id.year":1, "_id.month":1, "_id.day":1}}
])

我得到的结果只按天排序。在管道的$sort步骤中,我只使用了

{"$sort":{"_id.year":1, "_id.month":1}

结果是按年月正确排序的。在$sort step上可以使用多少字段有限制吗?

以下是一些示例文档

{
"_id" : "0001:20121201000000",
"RNF" : 0,
"WET" : 8,
"HMD" : 100,
"TMP" : 4.4
},
{
"_id" : "0001:20121201001500",
"RNF" : 0,
"WET" : 7.9,
"HMD" : 100,
"TMP" : 4.2
}

共有3个答案

宦兴朝
2023-03-14

排序没有限制。蒙戈文档

{ $sort: { <field1>: <sort order>, <field2>: <sort order> ... } }
花俊雄
2023-03-14

我在这里找到了一个可能的解决方案。我已经测试过了。

孔光赫
2023-03-14

引用文件:

$sort阶段具有以下原型形式:

<代码>{$排序:{

因此,对于$sort阶段可以使用的字段数量没有限制。

但是,存在内存限制:

$sort阶段的 RAM 限制为 100 MB。默认情况下,如果阶段超过此限制,$sort将产生错误。若要允许处理大型数据集,请将 allowDiskUse 选项设置为 true,以使$sort操作能够写入临时文件。

Pymongo中,使用lowDiskuse选项的语法是:

collection.aggregate(
    [
        { '$sort': { <field1>: <sort order>, <field2>: <sort order> ... } }
    ],    
    allowDiskUse = True
)
 类似资料:
  • 我需要向3个服务发送消息,并在最后聚合结果 这很容易通过发布订阅频道实现- 当其中一个服务实际上是对其他服务的2次调用时,就会出现问题。现在我想介绍另外的和聚合器。 例如。 因此不会对消息进行分组(逐个发送)。 聚合器1从聚合器2获取结果并发送消息,无需等待service activator组1的消息。 有什么建议吗?

  • 我不熟悉Spring和Mongo。我正在使用Spring Batch获取一些报告。我的查询需要一些MongoItemReader不支持的聚合,所以我根据下面的stackoverflow链接扩展了该类。 如何在Spring批处理中使用MongoItemReader聚合查询 但我的聚合有点问题。我制作的聚合在mongoDB中运行良好,但无法将其转换为Spring mongo聚合。 MongoDb聚合按

  • 根据Mozilla的说法,iOS上没有任何浏览器支持跨源开放策略,这是启用ShareDarrayBuffer的安全要求之一。这是否意味着我不能将SharedArrayBuffer用于iOS平台上的任何Web应用程序?

  • MongoDB中的聚合框架有解释功能吗?我在文件里看不到。 我知道找到你就行了 但是在聚合框架中,我得到了一个错误

  • 问题内容: 我想在字段上使用stats或extended_stats聚合,但是找不到完成此操作的任何示例(即,似乎只能将聚合与实际文档字段一起使用)。 是否有可能计算出“元数据”在ElasticSearch查询响应每个命中字段请求集合(例如,,,,等等)? 我假设答案是“否”,因为未对类似字段进行索引… 问题答案: 注意:就最新版本的Elasticsearch而言,原始答案现在已过时。使用Groo

  • 是否可以在$match中执行OR? 我的意思是这样的: