У меня есть следующая схема, а Base - сборщик информации один на всех:
const BaseSchema = mongoose.Schema({
creatorId: { type: mongoose.Schema.Types.ObjectId, required: true },
title: { type: String, required: true },
created: { type: Date, default: Date.now() },
users: [{ type: mongoose.Schema.Types.ObjectId, ref: "User" }],
messages: [{ type: mongoose.Schema.Types.ObjectId, ref: "Message" }]
});
И:
const BaseUserSchema = mongoose.Schema({
userId: { type: String },
baseId: { type: mongoose.Schema.Types.ObjectId },
created: { type: Date, default: Date.now() },
acceptedMembership: { type: Boolean, default: false },
isCreator: { type: Boolean, default: false }
});
(У меня есть один для Message, который выглядит примерно так же)
Последний обозначается как User в const User = mongoose.model("User", UserSchema);.
Когда я создаю новую базу, я автоматически добавляю пользователя в список внутри. В БД я вижу, что пользователь действительно существует, но когда я вызываю следующее, поле не заполняется:
Base.find({ creatorId: req.params.id })
.populate("users", "messages")
.exec()
.then(data => console.info(data));
Я получаю из console.info следующее:
[ { created: 2018-09-05T03:41:45.416Z,
users: [],
messages: [],
_id: 5b8f508b2760c5329c13a9be,
creatorId: 5b86f7970cd98b2004969bf0,
title: 'testBase1',
__v: 1 } ]
Когда я впервые создаю базу через интерфейс React и база добавляется в список, я вижу, что users.length равен 1 или длине автоматически созданного пользователя. Однако когда я обновляю страницу, список пользователей в консоли пуст.
Добавление: Забудьте показать, как я заполняю список пользователей при создании:
router.post("/add", jwtAuth, (req, res) => {
Base.create({
creatorId: req.body.userId,
title: req.body.title
}).then(baseInfo => {
BaseUser.create({
userId: req.body.username,
baseId: baseInfo._id,
created: Date.now(),
acceptedMembership: true,
isCreator: true
})
.then(baseuser => {
baseInfo.users.push(baseuser);
return baseInfo.save();
})
.then(base => res.json(base.serialize()));
});
});





Отвечать:
.populate("users", "messages")
для начала вернет messages из users. Это должны быть две отдельные записи, например:
.populate("users")
.populate("messages")
Тогда в модели
users: [{ type: mongoose.Schema.Types.ObjectId, ref: "User" }],
ссылается на неправильный ref. Должно быть
users: [{ type: mongoose.Schema.Types.ObjectId, ref: "BaseUser" }],
из
const BaseUser = mongoose.model("BaseUser", BaseUserSchema);
Наконец, я не уверен, нужно ли это, но я добавил ref к каждому из заполняемых элементов:
baseId: { type: mongoose.Schema.Types.ObjectId, required: true, ref: "Base" },
baseId: { type: mongoose.Schema.Types.ObjectId, ref: "Base" },
Теперь работает как шарм, все без дополнительных fetch