首页 > 解决方案 > Mongodb 文档中不存在的字段出现在 mongoose findById() 结果中

问题描述

我对与 Mongoose 相关的内容有些陌生,我认为这种行为很奇怪。Mongoose 返回的文档具有实际 MongoDb 文档中不存在的字段,并且似乎是由 Mongoose 基于架构添加的。

我使用与此类似的模式(此模式已简化):

const ProfessionalSchema = new mongoose.Schema({

    product: {
       details: [{
            _id: false,
            id: String, // UUID
            name: String,
            prestations: [{
                _id: false,
                id: String, // UUID
                name: String,
                price: Number,
            }],
        }],
    },
[...]

我在 Mongodb 中使用 mongo CLI 实用程序显示的文档没有产品字段。

我不明白的是为什么 Professional.findById().exec() 的结果返回带有 product:{details[]} 字段的文档。我希望 Mongoose 返回的结果中没有该字段,因为它不存在于原始 MongoDb 文档中。发现https://mongoosejs.com/docs/guide.html (架构和模型段落)的 Mongoose 文档没有帮助。

我的业务逻辑将要求该字段不存在,而不是由模式强制。这是可以实现的吗?

标签: node.jsmongodbmongoose

解决方案


试着看看这个default选项。例如,您可以将您的产品默认为null,然后在您的业务逻辑中处理“productnull”情况而不是“product字段不存在”情况。

至于为什么会发生这种情况,那是因为您正在处理模式。如果文档中不存在该字段,它将被自动填充。模式的重点是确保文档结构的一致性。


推荐阅读