В моем .catch появляется следующая ошибка, и мне трудно ее выяснить:
"message": "Cast to ObjectId failed for value \"{\n type: 'resistance',\n name: 'Bicep Curl',\n duration: 20,\n weight: 100,\n reps: 10,\n sets: 4\n}\" at path \"_id\" for model \"Exercise\"",
"name": "CastError",
"stringValue": "\"{\n type: 'resistance',\n name: 'Bicep Curl',\n duration: 20,\n weight: 100,\n reps: 10,\n sets: 4\n}\"",
"value": {
"type": "resistance",
"name": "Bicep Curl",
"duration": 20,
"weight": 100,
"reps": 10,
"sets": 4
},
"path": "_id",
"reason": {}
}
Здесь много информации, поэтому я начну с самого начала.
Мне дали исходный файл, который выглядит следующим образом. Насколько я знаю, я не должен касаться этого кода:
let mongoose = require("mongoose");
let db = require("../models");
mongoose.connect("mongodb://localhost/workout", {
useNewUrlParser: true,
useFindAndModify: false
});
let workoutSeed = [
{
day: new Date().setDate(new Date().getDate()-10),
exercises: [
{
type: "resistance",
name: "Bicep Curl",
duration: 20,
weight: 100,
reps: 10,
sets: 4
}
]
},
{
day: new Date().setDate(new Date().getDate()-9),
exercises: [
{
type: "resistance",
name: "Lateral Pull",
duration: 20,
weight: 300,
reps: 10,
sets: 4
}
]
},
{
day: new Date().setDate(new Date().getDate()-8),
exercises: [
{
type: "resistance",
name: "Push Press",
duration: 25,
weight: 185,
reps: 8,
sets: 4
}
]
},
{
day: new Date().setDate(new Date().getDate()-7),
exercises: [
{
type: "cardio",
name: "Running",
duration: 25,
distance: 4
}
]
},
{
day: new Date().setDate(new Date().getDate()-6),
exercises: [
{
type: "resistance",
name: "Bench Press",
duration: 20,
weight: 285,
reps: 10,
sets: 4
}
]
},
{
day: new Date().setDate(new Date().getDate()-5),
exercises: [
{
type: "resistance",
name: "Bench Press",
duration: 20,
weight: 300,
reps: 10,
sets: 4
}
]
},
{
day: new Date().setDate(new Date().getDate()-4),
exercises: [
{
type: "resistance",
name: "Quad Press",
duration: 30,
weight: 300,
reps: 10,
sets: 4
}
]
},
{
day: new Date().setDate(new Date().getDate()-3),
exercises: [
{
type: "resistance",
name: "Bench Press",
duration: 20,
weight: 300,
reps: 10,
sets: 4
}
]
},
{
day: new Date().setDate(new Date().getDate()-2),
exercises: [
{
type: "resistance",
name: "Military Press",
duration: 20,
weight: 300,
reps: 10,
sets: 4
}
]
},
{
day: new Date().setDate(new Date().getDate()-1),
exercises: [
{
type: "resistance",
name: "Bench",
duration: 30,
distance: 2
}
]
}
];
db.Workout.deleteMany({})
.then(() => db.Workout.collection.insertMany(workoutSeed))
.then(data => {
console.log(data.result.n + " records inserted!");
process.exit(0);
})
.catch(err => {
console.error(err);
process.exit(1);
});
Я создал 2 модели на основе этого семени и, конечно, индекс. js файл.
Тренировка :
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var WorkoutSchema = new Schema({
day: {
type: Date,
default: Date.now
},
exercises: [
{
type: Schema.Types.ObjectId,
ref: "Exercise"
}
]
});
const Workout = mongoose.model("Workout", WorkoutSchema);
module.exports = Workout;
Упражнение:
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const ExerciseSchema = new Schema({
type: String,
name: String,
duration: Number,
weight: Number,
reps: Number,
sets: Number,
distance: Number
});
const Exercise = mongoose.model("Exercise", ExerciseSchema);
module.exports = Exercise;
Указатель. js
module.exports = {
Workout: require("./Workout"),
Exercise: require("./Exercise")
};
Затем я запустил следующий код, чтобы посмотреть, смогу ли я получить json используя populate:
app.get("/api/workouts", (req, res) => {
db.Workout.find({})
.populate("exercises")
.then(dbWorkouts => res.json(dbWorkouts))
.catch(err => res.json(err))
});
Однако, это дает мне сообщение об ошибке, опубликованной в начале. Я не уверен, что понимаю, что не так. Если я удаляю populate (), я получаю пустой массив для упражнения. Я что-то упустил?
Редактировать: Кто-то сказал, чтобы попытаться заполнить ("Упражнения") и заполнить ("Упражнение"), и я получаю тот же результат, как если бы не запрограммирован populate (), который выглядит как это:
[
{
"exercises": [],
"_id": "5e9d0603a58905d8f0b3a958",
"day": "2020-04-10T02:16:35.784Z"
},
{
"exercises": [],
"_id": "5e9d0603a58905d8f0b3a959",
"day": "2020-04-11T02:16:35.785Z"
},
{
"exercises": [],
"_id": "5e9d0603a58905d8f0b3a95a",
"day": "2020-04-12T02:16:35.785Z"
},
{
"exercises": [],
"_id": "5e9d0603a58905d8f0b3a95b",
"day": "2020-04-13T02:16:35.785Z"
},
{
"exercises": [],
"_id": "5e9d0603a58905d8f0b3a95c",
"day": "2020-04-14T02:16:35.785Z"
},
{
"exercises": [],
"_id": "5e9d0603a58905d8f0b3a95d",
"day": "2020-04-15T02:16:35.785Z"
},
{
"exercises": [],
"_id": "5e9d0603a58905d8f0b3a95e",
"day": "2020-04-16T02:16:35.785Z"
},
{
"exercises": [],
"_id": "5e9d0603a58905d8f0b3a95f",
"day": "2020-04-17T02:16:35.785Z"
},
{
"exercises": [],
"_id": "5e9d0603a58905d8f0b3a960",
"day": "2020-04-18T02:16:35.785Z"
},
{
"exercises": [],
"_id": "5e9d0603a58905d8f0b3a961",
"day": "2020-04-19T02:16:35.785Z"
}
]
Edit2: Поскольку я смотрю на этот код и данные в базе данных, я понимаю, что теперь, когда засевается исходный файл, вложенный документ для упражнений НЕ генерирует ObjectID ,. В этом ли проблема? Я смотрю на свою модель тренировки, на которую ссылается упражнение, и я почти уверен, что это сделано правильно. Кто-нибудь знает, если я что-то упускаю?