我正在mongodb集合中存储在云中投放的视频的视频ID。当我的前端对该视频进行API调用时,我想基于该视频ID返回格式化的URL。我有一个函数可以执行此操作,但是我无法使其与$addFields
管道中的aggregate
一起使用:
我的文档如下:
{
"date" : ISODate("2018-03-30T00:00:00.000+0000"),
"title" : "Tips and Tricks",
"video_id" : "13966740",
}
...并且我希望我的API调用返回一个额外的字段"image_url"
:
{
"date" : ISODate("2018-03-30T00:00:00.000+0000"),
"title" : "Tips and Tricks",
"video_id" : "13966740",
"image_url" : "https://myhostingservice.com/13966740/preview_image",
}
这是我在models / video.js中尝试的方法:
const hostingservice = require('myhostingservicehelperfunctions');
module.exports.getVideo = function (callback) {
videoCollection.aggregate(
[
{ $match: { } },
{ $addFields: {
image_url: hostingservice.createImageURL("$video_id")
}
},
{ $sort: {
'date' : -1 }
}
],
callback);
};
helper函数只需获取字符串参数并返回一个字符串。
myhostingservicehelperfunctions.js
:
module.exports.createImageURL = function ImageURL(video_id){
return 'https://myhostingservice.com/' + video_id + '/preview_image';
};
我的前端接收到所有正确的数据,但是image_url
的值是“ https://myhostingservice.com/$video_id/preview_image
”,这让我认为我的函数已运行,但已传递了实际的字符串"$video_id"
,而不是键video_id
的值。仔细观察,该URL包含"$video_id"
,而不是上面示例中的"13966740"
。
我在这里做什么错了?
答案 0 :(得分:1)
您无法在mongoDB聚合中连接字符串,您需要使用concat运算符连接字符串,因此函数“ createImageURL”应如下所示
module.exports.createImageURL = function ImageURL(){
return { $concat: [ "https://myhostingservice.com/", "$video_id", "/preview_image" ] };
};