【问题标题】:Can I use more than 2 fields on a MongoDB aggregation framework $sort?我可以在 MongoDB 聚合框架 $sort 上使用超过 2 个字段吗?
【发布时间】:2015-04-08 15:36:16
【问题描述】:

使用以下 PyMongo 查询。我使用了 Mongo Webinar 中的一些技巧,他们建议使用 _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 步骤中可以使用的字段数量是否有限制?

这里是一些示例文档

{
"_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
}

【问题讨论】:

  • 不,据我所知没有限制。您能否向我们展示一些示例文档,尤其是在管道中未正确排序的少数文档?
  • @wdberkeley。完成。谢谢。

标签: mongodb sorting aggregation-framework


【解决方案1】:

引用文档:

$sort 阶段的原型形式如下:

{ $sort: { <field1>: <sort order>, <field2>: <sort order> ... } }

因此,$sort 舞台上可以使用的字段数量没有限制。


不过有内存restrictions

$sort 阶段的 RAM 限制为 100 兆字节。默认情况下,如果stage超过这个限制,$sort会产生错误。要允许处理大型数据集,请将 allowDiskUse 选项设置为 true 以启用 $sort 操作以写入临时文件。

Pymongo 中使用allowDiskUse 选项的语法是:

collection.aggregate(
    [
        { '$sort': { <field1>: <sort order>, <field2>: <sort order> ... } }
    ],    
    allowDiskUse = True
)

【讨论】:

    【解决方案2】:

    我找到了一种可能的解决方案here。我已经测试过了。

    【讨论】:

      【解决方案3】:

      排序没有限制。Mongo Documentation

      { $sort: { <field1>: <sort order>, <field2>: <sort order> ... } }
      

      【讨论】:

        猜你喜欢
        • 2013-05-16
        • 2021-09-15
        • 2013-07-23
        • 2013-03-19
        • 1970-01-01
        • 1970-01-01
        • 2018-06-16
        • 1970-01-01
        • 2021-01-27
        相关资源
        最近更新 更多