首页 > 解决方案 > Mongodb在数组元素内返回对象

问题描述

我有这个猫鼬模式,

const Schema = mongoose.Schema;

const productSchema = new Schema({
  name: { type: String, required: true },
  image: { type: String, required: true },
  saleSizes: [      //Sizes that a particular item has, ex.. Size P , M, G XG
    {
      saleSize: { type: String, required: true }, //actual sizes, ex.. P
      price: { type: Number, required: true }, // sales price for size P 
    },
  ],
  category: { type: String, required: true },
  active: { type: Boolean, default: true },
});

const Product = mongoose.model('Product', productSchema);
module.exports = Product;

当我加载页面时,我使用 find() 方法列出我所有的商品以及销售尺寸和价格。这是我正在使用的功能。

function homeController() {
  return {
    async index(req, res) {
      const products = await Product.find();
      
      console.log(products);

      const categories = [
        ...new Set(products.map((product) => product.category)),
      ];
      return res.render('home', { products: products, categories: categories });
    },
  };
}

find() 方法的返回是这样的。


[
  {
    active: true,
    _id: 60affa70d981bc59b64f2e09,
    name: 'Alface Americana',
    image: 'alface-americana.png',
    saleSizes: [ [Object], [Object] ],
    category: 'Hortaliças'
  },
  {
    active: true,
    _id: 60affa70d981bc59b64f2e0a,
    name: 'Couve',
    image: 'Couve.png',
    saleSizes: [ [Object], [Object] ],
    category: 'Hortaliças'
  },
  {
    active: true,
    _id: 60affa70d981bc59b64f2e0b,
    name: 'Agrião',
    image: 'agriao.png',
    saleSizes: [ [Object], [Object] ],
    category: 'Hortaliças'
  },
  {
    active: true,
    _id: 60affa70d981bc59b64f2e0c,
    name: 'Rúcula',
    image: 'rucula.png',
    saleSizes: [ [Object], [Object] ],
    category: 'Hortaliças'
  },
  {
    active: true,
    _id: 60affa70d981bc59b64f2e0d,
    name: 'Limão Taiti',
    image: 'limao-taiti.png',
    saleSizes: [ [Object], [Object] ],
    category: 'Frutas'
  },
  {
    active: true,
    _id: 60affa70d981bc59b64f2e0e,
    name: 'Goiaba Vermelha',
    image: 'goiaba-vermelha.png',
    saleSizes: [ [Object], [Object] ],
    category: 'Frutas'
  }

....
]

请注意,salesSizes 属性作为对象数组返回。

saleSizes: [ [Object], [Object] ].

我需要回报是这样的。

{
    active: true,
    _id: 60affa70d981bc59b64f2e18,
    name: 'Granola',
    image: 'granola.png',
    price: '500',
    saleSizes: [
                {saleSize: "P", price: "100"}, 
                {saleSize: "G", price: "200"} 
               ],
    category: 'Grãos'
  }

实现这一目标的最佳方法是什么?

PS:对不起我的英语,我来自巴西,还在学习(我认为这是一个永远的过程)。

标签: node.jsmongodbmongoose

解决方案


它被正确返回。saleSizes是对象的数组。{saleSize: "P", price: "100"}是对象。您可以尝试访问这些嵌套对象,如下所示:

let size = saleSizes[0].saleSize;
let price = saleSizes[0].price;

推荐阅读