У меня есть две схемы модели Mongoose следующим образом. Модель LabReport содержит массив указанной модели SoilLab. В модели SoilLab есть статический метод, который я использовал для выбора полей, отображаемых при получении LabReport.
//LabReport.js
var mongoose = require("mongoose");
var SoilLab = mongoose.model("SoilLab");
var LabReportSchema = new mongoose.Schema(
{
labFarm: { type: mongoose.Schema.Types.ObjectId, ref: "Farm" },
testName: { type: String },
soilLabs: [{ type: mongoose.Schema.Types.ObjectId, ref: "SoilLab" }],
},
{ timestamps: true, usePushEach: true }
);
LabReportSchema.methods.toLabToJSON = function () {
return {
labReport_id: this._id,
testName: this.testName,
soilLabs: this.soilLabs.SoilToLabJSON(),
};
};
mongoose.model("LabReport", LabReportSchema);
//SoilLab.js
var mongoose = require("mongoose");
var SoilLabSchema = new mongoose.Schema(
{
description: { type: String },
sampleDate: { type: Date },
source: { type: String },
},
{ timestamps: true, usePushEach: true }
);
SoilLabSchema.methods.SoilToLabJSON = function () {
return {
description: this.description,
sampleDate: this.sampleDate,
source: this.source,
};
};
mongoose.model("SoilLab", SoilLabSchema);
Когда я пытаюсь получить LabReport, я получаю «this.soilLabs.SoilToLabJSON не является функцией». Вот как я пытаюсь получить LabReport.
//labReports.js
...
return Promise.all([
LabReport.find()
.populate("soilLabs")
.exec(),
LabReport.count(query).exec(),
req.payload ? User.findById(req.payload.id) : null,
]).then(function (results) {
var labReports = results[0];
var labReportsCount = results[1];
var user = results[2];
return res.json({
labReports: labReports.map(function (labReport) {
return labReport.toLabToJSON(user); //This cant find SoilToLabJSON
}),
Если я удалю .SoilToLabJSON из LabReport.js и просто вызову this.soilLabs, он будет работать, но выведет все данные из почвыLabs, что станет проблемой, когда у меня будет модель, заполненная большим количеством данных. Я немного покопался в статике и методах и попытался изменить ее на статику, но это не сработало.
Я получаю почтовые лаборатории для заполнения, но не знаю, почему метод .SoilToLabJSON недоступен на данный момент. Нужно ли мне искать () или заполнять почвенную лабораторию по-другому? Метод неправильный?
1 ответ
Lab Report.toLa ToJSON передает массив, и это вызывало у меня ошибку. Я просто отредактировал LabReport.js следующим образом, чтобы взять массив и правильно сопоставить его с SoilToLab JSON.
myTestSoilLabOutput = function (soilLabs) {
var test = soilLabs.map(function (soilLab) {
return soilLab.SoilToLabJSON();
});
return test;
Изменен LabReportSchema.methods.toLabToJSON на:
LabReportSchema.methods.toLabToJSON = function () {
return {
labReport_id: this._id,
testName: this.testName,
soilLabs: myTestSoilLabOutput(this.soilLabs),
};
};
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Имейте в виду, что JavaScript — это НЕ то же самое, что Java! Включите все ярлыки, относящиеся к вашему вопросу; например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [svelte] и т. д.