Я храню в своей коллекции mongodb идентификатор видео для видео, размещенного в облаке. Когда мой интерфейс выполняет API-вызов для этого видео, я хочу вернуть отформатированный URL-адрес на основе этого идентификатора видео. У меня есть функция, которая делает это, но я не могу заставить ее работать с $addFields
in и aggregate
pipe:
Мои документы выглядят так:
{
"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",
}
Это то, что я пытаюсь в модели / 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);
};
Вспомогательная функция просто принимает строковый параметр и возвращает строку.
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"
из примера выше.
Что я здесь не так делаю?