【问题标题】:How to use find() called from mongoose model to get just that specific model from a collection that contains multiple models?如何使用从 mongoose 模型调用的 find() 从包含多个模型的集合中获取特定模型?
【发布时间】:2020-03-05 14:56:59
【问题描述】:

我有这些特定的架构:

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

我生成以下模型,注意 Student 和 Professor 是从 Person 模型扩展而来的:

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

我将它们全部存储在同一个集合“对象”中,当我从任何模型调用 f​​ind() 方法时,我会获取集合中的所有对象,而不仅仅是来自特定模型。我怎样才能从集合中检索一个特定的模型?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    当只询问一个特定的模型时,解决从所有模型获取所有文档的问题的方法是在构建模型时提供一些特定的参数参数。

    不仅仅是在模型中提供集合名称:

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

    您应该提供指定集合和 type 属性的参数组合:

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

    默认 discriminatoryKey 现在的值等于模型名称,而不是其默认值,即集合名称。当您使用 find() 方法时,它只会检索与模型相关的类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 2021-12-02
      • 2016-07-25
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      相关资源
      最近更新 更多