Amazon DocDB 聚合排序与 MongoDB 不同吗?
Is Amazon DocDB aggregate sorting dfiferent from MongoDB?
因此,如果我对聚合管道的理解正确,那么管道中的每个操作都会在前一个操作 'generated'.
的文档上执行
因此,目前我们正在从自己托管的 Mongo 迁移到 AWS 托管的 DocDB。现在我从 Amazons 文档中读到关于 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 文档:https://docs.mongodb.com/manual/reference/operator/aggregation/group/ 说明 $group does not order its output documents.
即使在他们提供的示例中,他们也$sort
将其作为聚合的最后一部分。
我在这里发现了类似的问题:
因此,如果我对聚合管道的理解正确,那么管道中的每个操作都会在前一个操作 'generated'.
的文档上执行因此,目前我们正在从自己托管的 Mongo 迁移到 AWS 托管的 DocDB。现在我从 Amazons 文档中读到关于 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 文档:https://docs.mongodb.com/manual/reference/operator/aggregation/group/ 说明 $group does not order its output documents.
即使在他们提供的示例中,他们也$sort
将其作为聚合的最后一部分。
我在这里发现了类似的问题: