猫鼬创建空数组?

时间:2013-12-20 23:40:06

标签: node.js mongodb mongoose

我有以下代码:

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属性定义为空数组(而不是根本不存在)。

猫鼬有意这样做吗?如果是这样的话?对我来说,尝试强制该属性根本不被定义(而不是被定义为空数组)会不是一个坏主意?

3 个答案:

答案 0 :(得分:4)

根据this answer默认情况下,它是为了使Model能够对数组执行标准操作,这在阵列为空时是可能的,但在nullundefined时则不行。

但是,可以使用空数组完全删除属性。根据{{​​3}}的最新更新,对模式的以下修改将起作用:

var questionSchema = new Schema({
   items: { type: Array, default: void 0 } // <-- override the array default to be undefined
});

答案 1 :(得分:3)

Mongoose确实故意这样做,虽然我不确定为什么。如果您将不希望存储的属性设置为undefined,则会将其从文档中排除。

set field as empty for mongo object using mongoose

答案 2 :(得分:0)

您可以将默认设置为undefined。从猫鼬文档中:

var ToyBoxSchema = new Schema({
  toys: {
    type: [ToySchema],
    default: undefined
  }
});