Пн goose refpath с внешней ссылкой и внутренней - PullRequest
0 голосов
/ 03 августа 2020

Моя база данных содержит две разные коллекции, у меня есть «группы» и у меня есть «пользователи». В каждой группе есть поле «участники», которое представляет собой массив, содержащий пользователей или гостей. Гости, в отличие от пользователей, хранятся в группе (поскольку они привязаны к определенной группе 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)
...