【问题标题】:Is Amazon DocDB aggregate sorting dfiferent from MongoDB?Amazon DocDB 聚合排序是否与 MongoDB 不同?
【发布时间】:2023-03-24 19:00:01
【问题描述】:

所以,如果我正确理解了聚合管道,那么管道中的每个操作都会在前一个操作“生成”的文档上执行。

因此,目前我们正在从自己托管的 Mongo 迁移到 AWS 托管的 DocDB。现在我从亚马逊的文档中读到了一些关于beforehand 的区别。但我不认为这个在里面,所以也许我只是做错了什么。

所以,我将这些文档添加到我的集合中,名为 interactions

db.interactions.insert([
    {
    "_id" : ObjectId("5daf0eb72f60b87bb2df4579"),
    "meta_data" : {
        "behavior_id" : "52f46df7ce882cd1888f9123",
        "activity_id" : "576437f8feb8bcf4a08df23c",
    },
    "created_at" : 2,
},
{
    "_id" : ObjectId("5daf0eb72f60b87bb2df457a"),
    "meta_data" : {
        "behavior_id" : "56c7914bbc1b9c03001bc11a",
        "activity_id" : "576437f8feb8bcf4a08df23b",
    },
    "created_at" : 1,
}
])

如果我这样做:

db.interactions.aggregate([

    {$match: {}},
    {$sort: { created_at: -1 }},

])

在 DocDb 和 Mongo 上,我按照我期望的顺序得到相同的输出(将排序号更改为 1 会翻转结果)

(例如,我只得到集合中的内容,但按创建时间降序排序)。

但是,如果我现在添加以下组管道(我假设现在已针对我的排序文档完成)。

{$group: { "_id": "$meta_data.behavior_id",  "activity_id": {$last: "$meta_data.activity_id"}}}

在 mongo 上我得到了这个:

{ "_id" : "56c7914bbc1b9c03001bc11a", "activity_id" : "576437f8feb8bcf4a08df23b" }
{ "_id" : "52f46df7ce882cd1888f9123", "activity_id" : "576437f8feb8bcf4a08df23c" }

这似乎是正确的顺序,将订单号更改为 1 也会影响此结果。但在 DocDB 上,我总是得到:

{ "_id" : "52f46df7ce882cd1888f9123", "activity_id" : "576437f8feb8bcf4a08df23c" }
{ "_id" : "56c7914bbc1b9c03001bc11a", "activity_id" : "576437f8feb8bcf4a08df23b" }

而且更改顺序不再有任何作用。

这只是在 DocDBB 上不起作用的东西,还是我只是期待这里有问题。

【问题讨论】:

    标签: mongodb amazon-web-services aggregation


    【解决方案1】:

    基于 MongoDB 文档:https://docs.mongodb.com/manual/reference/operator/aggregation/group/ 声明为$group does not order its output documents.

    即使在示例中,他们也提供$sort 作为聚合的最后一部分。

    我在这里发现了类似的问题:Sort and Group in one MongoDB aggregation query

    【讨论】:

      猜你喜欢
      • 2021-01-15
      • 2015-12-13
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      相关资源
      最近更新 更多