Как я могу использовать функцию getPublicFields с заполнением мангуста?

#javascript #node.js #mongodb #express #mongoose

Вопрос:

Вот функция getPublicFields в пользовательской схеме

Схема пользователя

  
 UserSchema.methods.getPublicFields = function () {
  var returnObject = {
    firstName: this.firstName,
    lastName: this.lastName,
    email: this.email,
    _id: this._id,
  };

  return returnObject;
};

 

здесь я просто соединяю схему пользователя с продуктом, и они дали мне все пользовательские данные, которые я не хочу

productController.Js

 
exports.getProducts = async (req, res, next) => {
  try {
    const products = await Product.find().populate("owner");
    res.status(200).send(products);
  } catch (e) {
    next(e);
  }
};

 

Схема продукта

 var mongoose = require("mongoose");
var { Schema } = mongoose;

const ProductSchema = new Schema({
  title: {
    type: String,
  },
  category: {
    type: String,
  },
  price: {
    type: Number,
  },
  completed: {
    type: Boolean,
    default: false,
  },
  owner: {
    ref: "User",
    type: mongoose.Schema.Types.ObjectId
  },
  img: {
    type : Array,
  }
});
module.exports = mongoose.model("Product", ProductSchema);
 

Комментарии:

1. Вы используете find , вам нужно передать объект фильтра в качестве параметра, иначе он выдаст все данные, хранящиеся в этой коллекции.

Ответ №1:

populate даст вам простой объект, а не экземпляр Мангуста. Что вы можете сделать, так это создать из него экземпляр пользователя:

 const user = new User(product.owner);
product.owner = user.getPublicFields();
 

Комментарии:

1. к сожалению, не работает на 100%, все еще есть некоторые проблемы

2. вы не могли бы подробнее рассказать о том, какая у вас проблема? Он все еще жалуется на то, что метод такой undefined ?

3. Нет.. это не «неопределенно» , в моей функции getPublicFields у меня нет поля токена и роли пользователя, как вы видите , поэтому я получаю нужные данные, но у меня все еще есть ТОКЕН и РОЛЬ ПОЛЬЗОВАТЕЛЯ с ним, тогда по какой-то причине проблема не работает на 100%, все еще есть какая-то проблема

4. Не могли бы вы опубликовать полный фрагмент кода здесь? Довольно трудно понять, в чем проблема, не видя кода