【问题标题】:Meteor/Mongo Failure to load data from aggregate/pipelineMeteor/Mongo 无法从聚合/管道加载数据
【发布时间】:2023-03-26 05:02:01
【问题描述】:

服务器控制台上的错误:UnhandledPromiseRejectionWarning:RangeError:超出最大调用堆栈大小

流星 1.8.1

项目在 1.6.x、MongoDB 3.2.x 上运行良好

mlab 将我推送到 mongo 3.6.x,现在我的一些图表 (chart.js) 和表格 (aslagle:reactive-table) 无法正常工作。

这两个都是通过聚合/管道生成的(下面的示例)。

长话短说,我已经忽略了这个项目好几个月了,刚刚回到它,遇到了这个问题,并尝试更新到 1.8.1。我在 mongo 4.0.6

图表和表格仍然无法正常工作,我认为这是因为我缺少对聚合和/或管道中的语法/结构的一些更新。我在这里很可能是错的,因为我生疏了,不是一个行业的开发者,而且如上所述几个月没有碰过这个。

这是一个用于绘制折线图 (Chart.js) 的失败聚合/管道:

pointTrendsSprt: function(uid, sp){
    var pipeline = [
                        { $match: {"userId": uid, "sport":sp, "slate": {$exists: true} } },
                        { $project: {slate:1, sport:1, pointsWon:1, createdAt:1} },
                        { $group: {
                                    _id: "$slate",
                                    sport: {"$addToSet": "$sport"},
                                    pointsWon: {"$sum": "$pointsWon"},
                                    createdAt: {"$max": "$createdAt"}
                                  } 
                        },
                        { $sort: { "createdAt":1 } }
                    ];

    return Results.aggregate(pipeline);
},

这是在 aslagle:reactive-table 中使用的另一个:

allXteam: function(uid){
    var pipeline = [
                        { $match: {"userId": uid, "win": "true"} },
                        { $project: {team:1, match:1, play:1, Count: "$count"} },
                        { $group: 
                            {_id: "$team", 
                            play: {"$addToSet": "$play"},
                            count:{$sum:1}} 
                        }
                    ];

    return Picks.aggregate( pipeline );

},

这两个都在 server 文件夹中的 methods.js 文件中。我在客户端的 js 文件中使用 Meteor.call 来设置会话变量,图表和表格从中提取。

如前所述,我认为我需要在我的聚合/管道中修复一些问题,但尝试添加“光标”和“解释”,但在该假设中要么没有做对,要么只是错了。

任何建议/指导将不胜感激。

【问题讨论】:

  • 聚合命令返回的结果在 Meteor 1.7 中发生了变化。详情见这里:docs.meteor.com/changelog.html#breakingchanges-8
  • 感谢您的回复!我确实找到了一个与您分享的内容相匹配的解决方案,但忽略了在此处更新它,因此以防万一它对任何人有所帮助,我已将其添加为下面的“答案”

标签: mongodb meteor aggregate pipeline


【解决方案1】:

我发现this solution 有效:

Collection.rawCollection().aggregate().toArray()

这是我最后的重构(尽管我将不得不研究那个 'Meteor.wrapAsync' 表单:

allXteam: async function(uid){
    var pipeline = [
                        { $match: {"userId": uid, "win": "true"} },
                        { $project: {team:1, match:1, play:1, Count: "$count"} },
                        { $group: 
                            {_id: "$team", 
                            play: {"$addToSet": "$play"},
                            count:{$sum:1}} 
                        }
                    ];

    const aXt = await Picks.rawCollection().aggregate( pipeline ).toArray();

    return aXt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 2020-05-02
    相关资源
    最近更新 更多