Моя база данных содержит две разные коллекции, у меня есть «группы» и у меня есть «пользователи». В каждой группе есть поле «участники», которое представляет собой массив, содержащий пользователей или гостей. Гости, в отличие от пользователей, хранятся в группе (поскольку они привязаны к определенной группе c).
Я использую схему «участник» как объект абстракции между пользователями / гостями и группой, таким образом Я могу дать разным пользователям разные привилегии.
Теперь о моей проблеме. Я хочу, чтобы схема «участника» работала как для пользователей, так и для гостей, как если бы гости были отдельной коллекцией. Однако в этом случае гости принадлежат объекту группы, и поэтому я не уверен, как я должен ссылаться на него. Я пробовал enum: ["пользователь", "гости"] и enum: ["пользователь", "встречи. Гости"] , но безрезультатно. Я получаю только следующую ошибку: MissingSchemaError: Schema hasn't been registered for model "guests".
. Это говорит мне о том, что я, очевидно, не понял, как ссылаться на вложенные документы в одной коллекции. Обратите внимание, я не хочу, чтобы гости были их собственной коллекцией.
Может быть, я могу как-то переместить объект «guest» в «members.user», но тогда мне придется как-то сказать mon go, что это уже не ObjectId, а объект?
Group.model.ts
export const ParticipantSchema = new Schema({
user: {
type: Schema.Types.ObjectId,
required: true,
refPath: "participants.userModel"
},
userModel: {
type: String,
required: true,
enum: ["user", "guests"] // How am I supposed to connect the guests as reference? The guests don't have their own collection, they are stored inside the group
},
privilege: {
type: Number,
required: true
}
})
export const GroupSchema = new Schema({
title: {
type: String,
required: true
},
description: {
type: String
},
participants: [ParticipantSchema],
guests: [GuestSchema]
}, {
timestamps: true
})
export default database.model("group", GroupSchema)
User.model.ts
export const UserSchema = new Schema({
username: {
type: String,
required: true
},
password: {
type: String,
required: true,
}
}, {
timestamps: true
})
export default database.model("user", UserSchema)