【发布时间】:2021-10-29 14:08:54
【问题描述】:
总结: 我正在尝试将 Mongodb 聚合的结果与第三方 API 相结合,但找不到任何相关内容。
解释:
下面的Express 路由查找在提供的日期之后发生且未被取消的所有游戏。下一步是从第三方 API 获取该单个游戏的一些数据并将其附加到对象并继续在管道中继续进行
问题:
似乎你不能在$function 内有XHR 请求(我在官方文档中没有找到任何内容,所以我不确定)
const today = moment();
today.year(2021);
today.month(5);
let response = await Game.aggregate([
{
$match: {
$expr: {
$and: [
{ $gte: ["$date", moment(today).startOf('day').toDate()] },
{ $eq: ["$canceled", false] },
]
}
}
},
{ $sort: { date: 1 } },
{
$addFields: {
boxScore: {
$function:
{
body: async function (season, week, home_team) {
const result = await axios.get(
`SINGLEGAMEURL/${season}/${week}/${home_team}`,
{
headers: {
'Subscription-Key': 'SOMEKEY',
},
}
);
return result.data;
},
args: ["$season", '$week', 'home_team'],
lang: "js"
}
}
}
}
]);
非常感谢您对此的任何帮助/指导,干杯!
【问题讨论】:
-
您是否遇到任何错误? JavaScript 函数在数据库服务器上运行。因此,作为服务器一部分的 JS 引擎需要具有您在
$function中调用的外部函数。您在$function中进行的调用正在使用一些不属于普通 JS 的软件组件,我明白了。 -
不,我没有收到任何错误,
boxScore字段返回一个空对象。如果我删除async,我会收到一条错误消息Mongodb Error: axios is not defined -
当服务器调用“body”时,它会同步调用,甚至会在尝试执行等待的函数调用之前返回一个promise。
-
我认为现在已经得到了这么多,所以问题是:有没有办法解决这个问题?
-
为什么在得到汇总结果后不调用?你可以在结果上用 javascript 做到这一点。据我所知,我只允许
function(){}作为正文,我认为没有使用库的方法,你需要我认为只是 JS 代码。
标签: node.js mongodb express mongoose nosql