【发布时间】: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