Мангуст заполняет 3 глубоко вложенные схемы с ответом JSON

#node.js #mongoose #nested #schema #populate

Вопрос:

У меня есть запрос find (), который при выполнении я могу видеть json с вложенными схемами, которые я хочу видеть, за исключением атрибута «артиста», в котором отображается только идентификатор, а не нужные мне свойства. Смотреть ниже:

 {
    "total": 1,
    "ordenes": [
        {
            "artpieces": [
                {
                    "_id": "60c1388f30316c02b9f6351f",
                    "artista": "60c055736c7ca511055a0e1a",
                    "nombre": "LILIES"
                },
                {
                    "_id": "60c12fca30316c02b9f63519",
                    "nombre": "GERNICA",
                    "artista": "60c136bf30316c02b9f6351b"
                }
            ],
            "_id": "60c414f9ea108a14ef75a9fb",
            "precio": 3000,
            "usuario": {
                "_id": "609c0068e67e68",
                "nombre": "Arturo Filio"
            }
        }
    ]
}
 

Запрос, который я использую для получения json выше:

 const [total, ordenes] = await Promise.all([
    Orden.countDocuments(),
    Orden.find()
      .populate("usuario", "nombre")
      .populate("artpieces", ["nombre","artista","nombre"])
  ]);

  res.json({
    total,
    ordenes
  });
 

Это схема заказа, в которой есть произведения искусства. У каждого произведения искусства (я назвал его «producto») есть название, жанр, автор/художник и пользователь, которому принадлежит заказ.

моя схема для orden.js:

 const { Schema, model } = require('mongoose');

const OrdenSchema = Schema({
  artpieces: [
    {
      type: Schema.Types.ObjectId,
      required: true,
      ref: 'Producto'
    }
  ],
  estado: {
    type: Boolean,
    default: true,
    required: true
  },
  usuario: {
    type: Schema.Types.ObjectId,
    ref: 'Usuario',
    required: true
  },
  precio: {
    type: Number,
    required: true
  }
})

OrdenSchema.methods.toJSON = function () {
  const { __v, estado, ...data} = this.toObject();
  return data;
}

module.exports = model('Orden', OrdenSchema);
 

Last thing I want to mention, I know for a fact that I have the code necessary in the artista.js model to display the name of the artist because I have a similar query to display all the artpieces with each artpiece have a genre and an artist.

That example looks like so (to give context):

 {
    "total": 4,
    "productos": [
        {
            "precio": 0,
            "_id": "60c12fca30316c02b9f63519",
            "nombre": "GERNICA",
            "categoria": {
                "_id": "60c04e3605d3c10ed10389e4",
                "nombre": "NEO CUBISMO"
            },
            "artista": {
                "_id": "60c136bf30316c02b9f6351b",
                "nombre": "PICASSO"
            },
            "usuario": {
                "_id": "609c8c0068e67e68",
                "nombre": "Arturo Filio"
            }
        }
    ]
}
 

What am I doing wrong that I can’t get my json result at the top look like the json at the bottom, where the artist attribute is?

Also just to point out, I have checked how to nest populate methods in order SO posts including the path and the ref to the Schema and still haven’t been able to get the expected result.