Поиск массива идентификаторов и сопоставление их с массивом элементов в отдельной схеме - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть база данных outfits, в которой каждый комплект представляет собой массив уникальных идентификаторов.У меня также есть отдельная база данных предметов, каждый из которых имеет уникальный идентификатор.

Я пытаюсь взять набор массивов из outfits и получить подробную информацию о соответствующих предметах.

Я написал функцию для поиска элементов по идентификатору и отправки их во внешний интерфейс, но я не могу поддерживать структуру массива в ответе.

exports.outfitRendered = (req, res) => {
var outfits = [["5c25109c07c4dd627126a1a6", "5c25109c07c4dd627126a1a6"], ["5c25109c07c4dd543126a1a6"]];

// CREATE SOME EMPTY ARRAYS
var newArray = []
var outerArray = []

// LOOK UP THE ITEMS IN THE OUTFIT FROM USER DB
function lookup(outfitId) {
    return new Promise(function (resolve, reject) {
        for (y of outfitId) {
            //console.log(y);
            User.aggregate([
                { $match: { '_id': mongoose.Types.ObjectId(req.user.id) } },
                { $unwind: '$wardrobe.items' },
                { $match: { 'wardrobe.items._id': y } },
                { $project: { 'wardrobe.items': 1, '_id': 0 } }
            ]).then(function (res) {
                newArray.push(res)
            }).then(function (resp) {
                resolve(this.newArray);
            });
        }
    });
}


// PUSH ITEMS INTO NEW ARRAY
function build(array) {
    return new Promise(function (resolve, reject) {
        for (x of array) {
            console.log(x);
            lookup(x)
                .then(function () {
                    outerArray.push(newArray);
                    console.log('incoming')
                    resolve(this.outerArray);
                })
        }
    });
}


// SEND TO FRONTEND
var ready = build(outfits)
    .then(function () {
        res.json(outerArray);
    });
}

Этот код отправляет первыйзначение в var outfits для внешнего интерфейса, и это выглядит хорошо.Но я не могу понять, как получить такую ​​же структуру массива в результате.

Это должно выглядеть так

Оригинал: outfits:

[["5c25109c07c4dd627126a1a6", "5c25109c07c4dd627126a1a6"], ["5c25109c07c4dd543126a1a6"]]

Результат: outerArray:

[["Red shirt", "Black pants"], ["Blue jeans"]]

1 Ответ

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

const items = { "5c25109c07c4dd587126a1a6": "Red shirt", "5c25109c07c4dd627126a1a6": "Black pants", "5c25109c07c4dd543126a1a6": "Blue jeans" };
const outfits = [
  ["5c25109c07c4dd587126a1a6", "5c25109c07c4dd627126a1a6"],
  ["5c25109c07c4dd543126a1a6"]
];

function getItem(itemId) {
  return items[itemId];
  /*return User.aggregate([
    { $match: { '_id': mongoose.Types.ObjectId(req.user.id) } },
    { $unwind: '$wardrobe.items' },
    { $match: { 'wardrobe.items._id': itemId } },
    { $project: { 'wardrobe.items': 1, '_id': 0 } }
  ]);*/
}

function lookupItems(outfits) {
  return Promise.all(outfits.map(itemIds => {
    return Promise.all(itemIds.map(getItem))
  }));
}

lookupItems(outfits).then(items => {
  console.log(items);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...