¿Es posible seleccionar ciertos atributos de un objeto? por ejemplo, excluyendo un correo electrónico, logoUri... etc. e información personal de un vendedor al completar dinámicamente?
Aquí está mi esquema de mensajes:
const messageSchema = mongoose.Schema({ chatId: { type: mongoose.Schema.Types.ObjectId, required: true, ref: "Chat", }, .... // sender can be type of User or Seller sender: { type: mongoose.Schema.Types.ObjectId, refPath: "senderType", required: true, }, senderType: { type: String, required: true, enum: ["User", "Seller"], }, readOn: { type: Date }, read: Boolean, //}, { sentOn: { type: Date, default: Date.now, }, });aquí es donde relleno mi esquema:
const messages = await Message.find({ chatId: chatId }) .populate("sender") .sort({ sentOn: -1, });dado que cada uno tiene un atributo diferente, ¿hay alguna forma de seleccionar según el tipo de modelo que estoy rellenando dinámicamente? Por ejemplo, para el modelo de usuario:
.select('-email -logoUri')para el modelo de vendedor:
.select('-address')Probablemente querrá configurar casos de uso con selectores para cada modelo para el que es el caso
messageSelectors = { user: "-email -logoUri", seller: "-address", ... }Luego, cada vez que necesite usar selectores para mensajes, puede usar selectores según lo que esté seleccionando
function selectMessageAttributesFor(type, query){ //verify type is in messageSelectors selected = await Messages.find(query).select(messageSelectors[type]).exec(callback); }