我正在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"传递的,而不是键值。仔细观察,URL包含video_id,而不是上面示例中的"$video_id"。我在这里做错了什么? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 您无法在mongoDB聚合中连接字符串,需要使用concat运算符连接字符串,因此函数“ createImageURL”应如下所示:module.exports.createImageURL = function ImageURL(){ return { $concat: [ "https://myhostingservice.com/", "$video_id", "/preview_image" ] };}; (adsbygoogle = window.adsbygoogle || []).push({});
08-28 03:58