首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Meteor/Mongo无法从聚合/管道加载数据

Meteor/Mongo无法从聚合/管道加载数据
EN

Stack Overflow用户
提问于 2019-09-04 07:37:34
回答 1查看 45关注 0票数 0

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

Meteor 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):

代码语言:javascript
复制
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:

代码语言:javascript
复制
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 );

},

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

正如前面提到的,我认为我需要修复聚合/管道中的某些东西,但尝试添加“cursor”和“explain”,但在这种假设中要么做得不对,要么就是错了。

如有任何建议/指导,我们将不胜感激。

EN

Stack Overflow用户

回答已采纳

发布于 2019-09-11 05:25:27

我发现this solution起作用了:

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

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

代码语言:javascript
复制
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;
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57779821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档