查找ID数组,并将其映射到单独模式中的项目数组

时间:2018-12-31 18:31:48

标签: javascript arrays node.js mongoose promise

我有一个outfits数据库,其中每个服装都是一组唯一的ID。我还有一个单独的商品数据库,每个商品都有一个唯一的ID。

我正在尝试从outfits获取一组数组,并获取相应项目的详细信息。

我已经编写了一个函数来通过ID查找项目,并将其发送到前端,但是我似乎无法在响应中维护数组结构。

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 :(得分:1)

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);
});