我有以下代码:
var questionSchema = new schema({
title: String,
subtitle: String,
required: Boolean,
type: String,
create_date: Date,
question_id: Number,
suvey_id: Number,
items: Array
});
var question = mongoose.model("Question", questionSchema);
var quest = getMyQuestion();
var record = new question({
title: quest.question,
subtitle: quest.subtitle,
required: quest.answer_required,
type: quest.question_type,
create_date: quest.create_date,
question_id: quest.id,
survey_id: quest.survey_id
});
record.save();
但是当我从我的数据库中提取此记录时,它始终将items
属性定义为空数组(而不是根本不存在)。
猫鼬有意这样做吗?如果是这样的话?对我来说,尝试强制该属性根本不被定义(而不是被定义为空数组)会不是一个坏主意?
答案 0 :(得分:4)
根据this answer默认情况下,它是为了使Model能够对数组执行标准操作,这在阵列为空时是可能的,但在null
或undefined
时则不行。
但是,可以使用空数组完全删除属性。根据{{3}}的最新更新,对模式的以下修改将起作用:
var questionSchema = new Schema({
items: { type: Array, default: void 0 } // <-- override the array default to be undefined
});
答案 1 :(得分:3)
Mongoose确实故意这样做,虽然我不确定为什么。如果您将不希望存储的属性设置为undefined
,则会将其从文档中排除。
答案 2 :(得分:0)
您可以将默认设置为undefined
。从猫鼬文档中:
var ToyBoxSchema = new Schema({
toys: {
type: [ToySchema],
default: undefined
}
});