Агрегатная функция MongoDB не возвращает значение коллекции, объединенной с использованием JavaScript - PullRequest
0 голосов
/ 12 декабря 2018

Мне понадобилась помощь, чтобы понять, почему агрегатная функция не отвечает так, как я ожидаю.Это разработанная мной служба API RESTful, в которой я пытаюсь соединить коллекции друг с другом.Обратите внимание на следующее:

Коллекция: Сезон

{
"_id": {
    "$oid": "5c0fc60bfb6fc04dd6ea4e9a"
},
"Season": "1",
"TotalEpisode": "15",
"Name": null,
"Description": "First season with no name for this drama",
"PlayID": "5c0fc4aafb6fc04dd6ea4d81"
}

Коллекция: Play

{
"_id": {
    "$oid": "5c0fc4aafb6fc04dd6ea4d81"
},
"Name": "It was the first time",
"Description": "One of the best action heros in the entertainment industry until this day",
"ReleaseDate": "24/12/2010",
"EndingDate": "12/08/2012",
"Category": "Drama"
}

Мой реализованный код в JavaScript

function getTestLookUp(db, collectionName, response, secondCollectionName){
console.log('First collection name: ' + collectionName + '\n' + 'Second collection name: ' + secondCollectionName);
db.collection(collectionName).aggregate([
    {
        $lookup:
        {
            from: secondCollectionName,
            localField: 'PlayID',
            foreignField: '_id',
            as: 'requestedDetails'
        }
    }
]).toArray((err, res) => {
    if(err){ 
        console.log(err);
    } else {
        console.log(res);
        response.status(200).json({
            'Items': res
        });
    }
});
}

Ответ

{
    "Items": [
        {
            "_id": "5c0fc60bfb6fc04dd6ea4e9a",
            "Season": "1",
            "TotalEpisode": "15",
            "Name": null,
            "Description": "First season with no name for this drama",
            "PlayID": "5c0fc4aafb6fc04dd6ea4d81",
            "requestedDetails": []
        }
    ]
}

Вещи, которые я проверял до сих пор: имена коллекцийточный, идентификатор также точный, так как я могу найти его с помощью функции поиска MLabs.Я не понимаю, почему это возвращает пустой «требуемый элемент», так как я надеялся, что он вернет элемент из коллекции Play.

В дополнение к этому, я также был бы признателен, если бы кто-то мог указать, как я могу объединить несколько коллекций вместо 2.

Я приветствую любые вопросы, касающиеся этой проблемы.

1 Ответ

0 голосов
/ 12 декабря 2018

Продолжая исследовать эту проблему, я случайно наткнулся на другую проблему, в которой кто-то написал комментарий о том, что «вы можете сравнивать строку с ObjectID».Это было причиной этой ошибки, так как я получаю переменную String в ответ из базы данных, и я сравниваю переменную String с _id, который ожидает увидеть переменную ObjectID для завершения запроса.Следовательно, это означает, что мой запрос / поиск никогда не совпадает с этими двумя переменными.

Единственный способ решить эту проблему - выполнить преобразование (строка в ObjectID) и затем сравнить значения.Однако, поскольку я использую версию MongoDB ^ 3.1.10, эта функциональность невозможна.Потребуется обновить версию до 4.0, чтобы иметь возможность реализовать эту функцию.

Чтобы устранить эту проблему, мне удалось заключить внешний идентификатор в теги $ iod.

До

{
"_id": {
    "$oid": "5c0fc60bfb6fc04dd6ea4e9a"
},
"Season": "1",
"TotalEpisode": "15",
"Name": null,
"Description": "First season with no name for this drama",
"PlayID": "5c0fc4aafb6fc04dd6ea4d81"
}

После

{
"_id": {
    "$oid": "5c0fc60bfb6fc04dd6ea4e9a"
},
"Season": "1",
"TotalEpisode": "15",
"Name": null,
"Description": "First season with no name for this drama",
"PlayID": {
"$oid": "5c0fc4aafb6fc04dd6ea4d81"
}
}

Ответ

{
    "Items": [
        {
            "_id": "5c0fc60bfb6fc04dd6ea4e9a",
            "Season": "1",
            "TotalEpisode": "15",
            "Name": null,
            "Description": "First season with no name for this drama",
            "PlayID": "5c0fc4aafb6fc04dd6ea4d81",
            "Details": [
                {
                    "_id": "5c0fc4aafb6fc04dd6ea4d81",
                    "Name": "It was the first time",
                    "Description": "One of the best action heros in the entertainment industry until this day",
                    "ReleaseDate": "24/12/2010",
                    "EndingDate": "12/08/2012",
                    "Category": "Drama"
                }
            ]
        }
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...