繁体   English   中英

分组阶段的排序聚合返回无用的 $first

[英]Sorted aggregation with group stage returns useless $first

数据

我的收藏是未嵌套的交易数据。 第三方每年更改一次或两次他们的架构。 我正在创建我所说的架构更改表,其中列出了事务架构及其effective_date日期。 我需要为 Mongo 集合中的预先存在的数据初始化此表。

原始数据中的重要特征如下所示:

[_id, ..., [...], ..., g_uploaded_at, g_unique_id]

[...]是交易特征: TimeAmount等不在聚合中)

与 Group 阶段的聚合

根据另一篇文章,我有一个聚合管道,它实际上为模式中的每个更改返回一行,结果中具有三个特征:

  • all_keys ,所有功能/标题的连接
  • g_unique_id ,一些具有这些特征的记录
  • g_uploaded_at应该是最旧/最新记录的排序日期

问题

这种聚合的结果并不一致 回想一下,目标是使用排序和分组来定义模式更改的边界

result = coll.aggregate([
    {'$sort': {'g_uploaded_at': -1}},
    {
        '$project': {
            'data': {'$objectToArray': "$$ROOT"},
            'g_unique_id': 1,
            'g_uploaded_at': 1}
    },
    {'$unwind': "$data"},
    {'$project': {'g_uploaded_at': 1, 'g_unique_id': 1, 'key': "$data.k", '_id': 0}},
    {'$sort': {'key': 1}},
    {
        '$group': {
            '_id': "$g_unique_id", 
            'all_keys': {'$push': "$key"},
            'g_uploaded_at': {'$first': "$g_uploaded_at"},
        }
    },
    {
        '$project': {
            'all_keys': 1,
            'g_uploaded_at': 1,
            'all_keys_string': {
                '$reduce': {
                    'input': "$all_keys",
                    'initialValue': "",
                    'in': {'$concat': ["$$value", "$$this"]}
                }
            }
        }
    },
    {
        '$group': {
            '_id': "$all_keys_string",
            'all_keys': {'$first': "$all_keys"},
            'g_unique_id': {'$first': "$_id"},
            'g_uploaded_at': {'$first': "$g_uploaded_at"},

        }
    },
    {'$unset': "_id"},
])

游乐场示例

如果我多次运行此操作,具有值BAZ的功能all_keys将(最终,继续尝试)循环遍历玩具数据集中的不同 ID 和日期(11 条记录)。

如此处所述使用$firstA:mongo 组查询如何保留字段我是 Mongo 的新手。 也许是菜鸟的错误?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM