查询未在 Mongoose 模型中定义的文档

Posted

技术标签:

【中文标题】查询未在 Mongoose 模型中定义的文档【英文标题】:Query documents not defined in a Mongoose model 【发布时间】:2022-01-22 13:50:12 【问题描述】:

我使用 Intervention 模型上的 Mongoose 的 findById 方法查询名为 interventions 的 Mongo 集合。查询返回关联模型中定义的所有字段。

student 字段也存在于 interventions 集合中。猫鼬没有归还它。据推测,这是因为复杂的student 对象(25-30 个键/值对)未在干预模型中定义。我永远不需要将文档插入到干预模型中。

import mongoose from 'mongoose'

const  Schema  = mongoose

const interventionSchema = new Schema(
  
    abs_count_excused:  type: Number ,
    abs_count_unexcused:  type: Number ,
    abs_count_total:  type: Number ,
    student_id:  type: Number, required: true 
  
)

const Intervention = mongoose.model(
  'Intervention',
  interventionSchema,
  'interventions'
)
export default Intervention

是否可以在不在干预模型中定义 student 子文档的情况下检索它?

谢谢。

【问题讨论】:

您是否需要更新student 字段? 不通过干预模型。 【参考方案1】:

我不相信您可以在不以某种方式将其作为 Mongoose 架构的一部分的情况下从 MongoDB 检索值。对于 Mongoose 的 Mixed schema type 来说,这似乎是一个机会。

因为您关心的是要将复杂的student 文档转换为架构,并且您不打算通过Intervention 模型更新它,所以Mixed 架构类型的缺点不适用。因此,您可以将 student 字段添加到您的架构中,如下所示:

const interventionSchema = new Schema(
  
    abs_count_excused:  type: Number ,
    abs_count_unexcused:  type: Number ,
    abs_count_total:  type: Number ,
    student_id:  type: Number, required: true ,
    student:  type: Object 
  
)

【讨论】:

以上是关于查询未在 Mongoose 模型中定义的文档的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose 聚合查询在 Jest/Mockgoose 测试中失败,在其他地方工作

Mongoose MongoDb 未在 Node Shell 中显示模式或模型

猫鼬自己填充自定义查询

Mongoose .populate 未在 JSON 中显示

为啥使用 Mongoose JS 删除嵌入式子文档数组的元素不起作用?

如何在 Mongoose 中增加子文档的属性?