node.js - 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 文档没有帮助。
我的业务逻辑将要求该字段不存在,而不是由模式强制。这是可以实现的吗?
解决方案
试着看看这个default
选项。例如,您可以将您的产品默认为null
,然后在您的业务逻辑中处理“product
是null
”情况而不是“product
字段不存在”情况。
至于为什么会发生这种情况,那是因为您正在处理模式。如果文档中不存在该字段,它将被自动填充。模式的重点是确保文档结构的一致性。
推荐阅读
- javascript - 理解和转换 Ruby 的 ChunkyPNG 到 Javascript 等价物
- crm - Bitrix24 crm 上的分类自定义字段
- c# - 关闭表单时管理活动表单 C#
- ios - Xamarin.iOS 没有看到对 iOS 绑定库的引用
- r - 在 R 中创建带有管道的 data.frame - 并命名列
- c - OSX中ftruncate的文件大小限制是多少?
- flutter - 颤振的video_playeur包问题
- azure - 我试图了解如何在我有各种设备发送各种数据的情况下选择 Azure IOT 集线器的数量
- java - Spring Boot 自动装配存储库 null
- python - zeppelin aws中的spark python错误运行程序