Как использовать find (), вызванную из модели mon goose, чтобы получить именно эту модель c из коллекции, содержащей несколько моделей? - PullRequest
0 голосов
/ 05 марта 2020

У меня есть эти конкретные c схемы:

const PersonSchema = new Schema({
    Name: String,
})
const StudentSchema = new Schema({
    Class: String,
    Professor: String
})
const ProfessorSchema = new Schema({
    Class: String,
    Students: Number
})

Я создаю следующие модели, обратите внимание, что Студент и Профессор расширены от модели Person:

mongoose.model("Person", PersonSchema, "objects" )
Person.discriminator("Professor", ProfessorSchema, "objects")
Person.discriminator("Student", StudentSchema, "objects")

Я храню их все в одной и той же коллекции "объектов", и когда я вызываю метод find () из любой модели, я получаю все объекты в коллекции, а не только из конкретная c модель. Как я могу просто извлечь из коллекции одну указанную c модель?

1 Ответ

0 голосов
/ 10 марта 2020

Способ решения этой проблемы получения всех документов из всех моделей при запросе только одного c состоит в том, чтобы предоставить некоторые конкретные аргументы c аргументов при построении модели.

Вместо того, чтобы просто указывать имя коллекции в модели:

Person.discriminator("Professor", ProfessorSchema, "objects")

Вы должны предоставить набор аргументов, которые определяют коллекцию, и атрибут type :

const baseOptions = {
    collection: "objects",
    discriminatorKey: '__type'
}
const Professor = Person.Model.discriminator("Professor", ProfessorSchema, baseOptions)

Значение по умолчанию дискриминационный ключ теперь имеет значение, равное имени модели, а не значение по умолчанию, которое является именем коллекции. Когда вы используете метод find (), он получает только тип, связанный с моделью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...