Mongodb 按重点分组流星收集

Mongodb 按重点分组流星收集,mongodb,meteor,collections,group-by,Mongodb,Meteor,Collections,Group By,你好,在问这个问题之前,我已经搜索了很多,但仍然没有找到任何合适的答案。 我有一个集合(它每x秒从MSSQL表复制一次),如下所示: 如您所见,有些字段具有相同的键(MessageId)。 我的目标是对它们进行某种类型的分组,通过获取MessageId+Message(每个记录都有相同的MessageId),最后我将把它插入到新集合中。 所以最终结果应该是这样的: 你知道我该怎么做吗?你可以使用聚合对收集的数据进行分组,以获得最终结果,这个过程实际上非常简单 首先,如果尚未添加这两个包,请运行

你好,在问这个问题之前,我已经搜索了很多,但仍然没有找到任何合适的答案。 我有一个集合(它每x秒从MSSQL表复制一次),如下所示:

如您所见,有些字段具有相同的键(MessageId)。 我的目标是对它们进行某种类型的分组,通过获取MessageId+Message(每个记录都有相同的MessageId),最后我将把它插入到新集合中。 所以最终结果应该是这样的:


你知道我该怎么做吗?

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

首先,如果尚未添加这两个包,请运行meteor add meteorhacks:aggregate和meteor add mikowals:batch insert

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

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);

请注意,这个示例只是我的想法的一个体现,因此如果您将粘贴直接复制到代码中,它可能不起作用。

您是否尝试过使用mongodb的聚合框架?您可以在meteor中使用它,方法是添加
meteor添加meteorhacks:aggregate
包,该包将允许您在收集实例上使用.aggregate。我不太确定如何在我的案例中使用此框架在您的最终结果中,您是否介意所有消息都在一个数组中,而不是消息1、消息2,消息_3…?请给出一个示例进行尝试。从我受挫的那一点出发的任何东西都应该很棒