我有一个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"]]
答案 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);
});