Mongodb $ addFields, вернуть значение поля из функции? - PullRequest
0 голосов
/ 17 января 2019

Я храню в своей коллекции 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" из примера выше.

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 17 января 2019

Вы не можете объединять подобные строки в агрегации mongoDB, вам нужно объединять строки с помощью оператора concat, поэтому функция createImageURL должна выглядеть примерно так:

module.exports.createImageURL = function ImageURL(){
    return { $concat: [ "https://myhostingservice.com/", "$video_id", "/preview_image" ] };
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...