Mongodb文档中不存在的字段显示在mongoose findById()结果中

时间:2018-08-23 22:09:17

标签: node.js mongodb 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,
            }],
        }],
    },
[...]

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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