#node.js #mongoose #feathersjs
#node.js #мангуст #feathersjs
Вопрос:
При использовании метода find, как можно заполнить данные из другой коллекции. Операция объединения, которую мы выполняем с базами данных sql. Прямо сейчас я использую что-то вроде: code:
async find(data, params) {
let records = await super.find(data, params);
let newrecords = records.data.map(async (user) => {
let professordetails = await this.app
.service("users")
.get(user.professorId);
professordetails.password = undefined;
user.professorId = professordetails;
return user;
});
return await Promise.all(newrecords).then((completed) => {
return completed;
});
}
Это служба курса и ее модель :
module.exports = function (app) {
const modelName = "courses";
const mongooseClient = app.get("mongooseClient");
const { Schema } = mongooseClient;
const { ObjectId } = Schema;
const schema = new Schema(
{
name: { type: String, required: true },
details: { type: String, required: true },
professorId: { type: ObjectId, ref: "users", required: true },
enrolledStudents: [{ type: ObjectId, ref: "users" }],
},
{
timestamps: true,
}
);
// This is necessary to avoid model compilation errors in watch mode
// see https://mongoosejs.com/docs/api/connection.html#connection_Connection-deleteModel
if (mongooseClient.modelNames().includes(modelName)) {
mongooseClient.deleteModel(modelName);
}
return mongooseClient.model(modelName, schema);
};
Это что-то вроде нежелательной операции, поскольку мы заполняем. Но я не мог этого сделать с помощью populate.
Комментарии:
1. Я думаю, это может быть проблема с тем, как вы создаете записи данных. Не могли бы вы показать мне, как вы создаете записи? Может быть, мы могли бы выяснить, что не так.
2. Для создания данных я использую стандартные маршруты feathersjs serivice. И я ничего не трогаю в методе create. Просто передаю идентификатор препроцессора, и я указал ссылку на идентификатор профессора в модели курса. Так вот что здесь происходит!