#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. Не могли бы вы опубликовать полный фрагмент кода здесь? Довольно трудно понять, в чем проблема, не видя кода