使用Mongoose构建REST API时布尔数组字段存储异常求助
解决Mongoose中布尔数组对象存储异常问题
嘿,我一眼就瞅出问题根源了——你的benefitsOffers字段在Schema里的定义方式完全错了!
你现在的Schema片段是这么写的:
const companiesSchema = mongoose.Schema({ _id: mongoose.Schema.Types.ObjectId, benefitsOffers: [ { balance : Boolean }, { car: Boolean }, { bonseModel: Boolean }, { centerlaOffice: Boolean } ] })
这种写法相当于告诉Mongoose:benefitsOffers是一个数组,数组里的每个元素都是独立的子文档——第一个元素是只含balance的对象,第二个是只含car的对象,以此类推。而Mongoose默认会给每个子文档自动生成_id字段,这就导致你看到的“除第一个元素外,其余布尔值被替换为ID”的异常。
根据你的实际需求,有两种正确的定义方式:
需求1:每个公司只有一组福利选项(单个对象)
如果benefitsOffers是用来描述公司提供的一组福利(比如是否提供余额福利、车补等),那应该把它定义为一个对象类型,而不是数组:
const companiesSchema = mongoose.Schema({ _id: mongoose.Schema.Types.ObjectId, benefitsOffers: { balance: Boolean, car: Boolean, bonseModel: Boolean, centerlaOffice: Boolean } })
需求2:每个公司有多组福利套餐(对象数组)
如果你的场景是一个公司有多个福利套餐,每个套餐都包含这些布尔属性,那要把数组的元素定义为包含所有字段的单个对象,还可以加上_id: false来禁止自动生成子文档ID:
const companiesSchema = mongoose.Schema({ _id: mongoose.Schema.Types.ObjectId, benefitsOffers: [ { balance: Boolean, car: Boolean, bonseModel: Boolean, centerlaOffice: Boolean, _id: false // 可选,避免生成不必要的子文档ID } ] })
修改完Schema后,重新测试数据存储,你就能看到布尔值正常存入数据库,不会再出现被ID替换的问题啦!
内容的提问来源于stack exchange,提问作者Daniel Nilles
相关产品推荐
相关产品推荐

