Позвольте мне начать с того, что я знаю, что это, кажется, часто задаваемый вопрос, и я потратил пару дней, пытаясь выяснить его, но, похоже, никакой ответ не работает, поэтому я пытаюсь здесь.
У меня есть две модели: Пользователь и Глава : Глава может иметь много членов ( Пользователи ).Когда я делаю router.get('/chapters')
, я хочу видеть массив всех Users , связанных с Chapter , как свойство вместе с другими Chapter свойствами, вот так:
[
{
"leads": [],
"members": [
{"_id":"someString1","firstName":"...", "lastName":"..."},
{"_id":"someString2","firstName":"...", "lastName":"..."},
],
"date": "2018-12-12T15:24:45.877Z",
"_id": "5c11283d7d13687e60c186b3",
"country": "5c11283d7d13687e60c185d6",
"city": "Buckridgestad",
"twitterURL": "qui",
"bannerPic": "http://lorempixel.com/640/480/people",
"__v": 0
}
]
Но я получаю вот что:
[
{
"leads": [],
"members": [],
"date": "2018-12-12T15:24:45.877Z",
"_id": "5c11283d7d13687e60c186b3",
"country": "5c11283d7d13687e60c185d6",
"city": "Buckridgestad",
"twitterURL": "qui",
"bannerPic": "http://lorempixel.com/640/480/people",
"__v": 0
}
]
Это мои схемы:
Глава
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
// Create Schema
const ChapterSchema = new Schema({
country: {
type: Schema.Types.ObjectId,
ref: "countries"
},
city: {
type: String,
required: true
},
leads: [
{
type: Schema.Types.ObjectId,
ref: "users"
}
],
members: [
{
type: Schema.Types.ObjectId,
ref: "users"
}
],
twitterURL: {
type: String,
required: true
},
bannerPic: {
type: String,
required: true
},
date: {
type: Date,
default: Date.now()
}
});
module.exports = Chapter = mongoose.model("chapters", ChapterSchema);
Пользователь
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
// Create Schema
const UserSchema = new Schema({
username: {
type: String,
required: true
},
firstName: {
type: String,
required: true
},
lastName: {
type: String,
required: true
},
organisation: {
type: String,
required: true
},
chapter: {
type: Schema.Types.ObjectId,
ref: "chapters"
},
email: {
type: String,
required: true
},
admin: {
type: Boolean,
default: false
},
lead: {
type: Boolean,
default: false
},
password: {
type: String,
required: true
},
date: {
type: Date,
default: Date.now()
}
});
module.exports = User = mongoose.model("users", UserSchema);
Как я уже сказал, когда я вызываю конечную точку, я хочу, чтобы она вернула мне все глав со всеми Пользователи как заполненное свойство.
Я пробовал множество вариантов .populate () , но чтобы знать удачу.Самое близкое, что я получил, проходило через ранние уровни ада обратного вызова, которые, как я знаю, не нужны в сегодняшних технологиях, но ничего не работает!
Мои route / api / chapters.js
// @route GET api/chapters
// @desc Get all Chapters
// @access Public
router.get("/", (req, res) => {
Chapter.find()
.populate("members")
.then(chapters => {
return res.json(chapters);
})
.catch(err =>
res.status(404).json({ nochaptersfound: "No Chapters found" })
);
});
Я могу заставить его работать наоборот:
Мои routs / api / users.js
// @route GET api/users
// @desc Return all users
// @access Public
router.get("/", (req, res) => {
User.find()
.populate("chapter")
.exec()
.then(users => res.status(200).json(users))
.catch(err => console.log(err));
Возвращает aпользователь с заполненным Chapter , но я не могу заполнить chapter.members array
Любая помощь будет принята с благодарностью!
Спасибо!!