【问题标题】:Group By key Meteor Collection按键分组 Meteor Collection
【发布时间】:2016-01-26 10:18:49
【问题描述】:

您好,在提出问题之前我已经进行了很多搜索,但仍然没有找到任何适合我的问题的答案。 我有一个这样的集合(它每隔 x 秒从 MSSQL 表中复制一次):https://ekhmoi.tinytake.com/sf/MzU2MTcwXzIwNDcxNTg

如您所见,有些字段具有相同的键(MessageId)。 我的目标是对它们进行某种分组,通过使用 MessageId + Message(每条具有相同 MessageId 的记录),最后我将它插入到新的集合中。 所以最终结果应该是这样的: https://ekhmoi.tinytake.com/sf/MzU2MTc3XzIwNDcyMDY

知道我该怎么做吗?

【问题讨论】:

  • 你试过使用mongodb的聚合框架吗?您可以通过添加 meteor add meteorhacks:aggregate 包在流星中使用它,这将允许您在集合实例上使用 .aggregate。
  • 我不太清楚在我的情况下如何使用这个框架
  • 在您的最终结果中,您是否介意所有消息都在一个数组中而不是 message_1、message_2、message_3 .....?
  • 请举个例子试试。从我卡住的点出发的任何事情都应该很棒

标签: mongodb meteor collections group-by


【解决方案1】:

您可以使用聚合对集合数据进行分组以获得最终结果,过程实际上非常简单。

如果您还没有添加这两个包,首先运行meteor add meteorhacks:aggregatemeteor add mikowals:batch-insert

假设 CollectionA 是第一个集合,而 CollectionB 是第二个集合。以下是我如何对 Collection A 中的数据进行分组并将最终结果写入 CollectionB:

let pipeline = [
    {$project: {TraceId: 1, MessageId: 1, Message: 1}},
    {$group: {
        _id: "$MessageId",
        Message: {$push: "$Message"},
        TraceId: {$first: "$TraceId"}
    }},
    {$project: {
        _id: 0,
        MessageId: "$_id",
        Message: 1,
        TraceId: 1
    }}
];

let groupedData = CollectionA.aggregate(pipeline);

CollectionB.batchInsert(groupedData);

请注意,此示例仅代表我的想法,因此如果您将粘贴直接复制到代码中,它可能无法正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多