为什么Mongoose添加空白数组?

我试图开始使用Mongoose作为MongoDB的ODM与我的node.js应用程序。 我注意到,当我devise一个embedded式文档的模式,如果我不给它添加一个值,它会在Mongo中存储一个空白数组“[]”。 为什么是这样? 我试图将历史更改存储到logging中,而空白数组意味着该更改将删除该值。 这是一个示例模式。

schema.Client = new mongoose.Schema({ name:{type:String, required:true}, products:[{ name:{type:String, index:true}, startDate:Date, endDate:Date }], subdomain:{type:String, index:{unique:true}}, }) 

当我用名字和子域名保存一个文档时,这是最终的文档。

 { "name": "Smith Company", "products": [], "subdomain": "smith" } 

为什么默认情况下会添加一个空白数组的产品,我该如何阻止它呢?

空白数组为您提供添加或删除模型元素的便捷方法。

$push $addToSet $pull在更新将帮助你pipe理你的数组元素。

如果你没有一个空白的数组,那么你不能将元素推送到null

但是它可能在空白数组中

这似乎是由devise,但有一个解决方法在这里使用'pre'处理程序来删除默认的空数组: https : //github.com/LearnBoost/mongoose/issues/1335

但是,只有当我将字段设置为null ,这才起作用。 如果我将其设置为undefined如示例代码,空数组似乎回来。

您可以通过像下面这样定义架构来解决这个问题:

 products: { type: [{ name:String, startDate:Date, endDate:Date }], default: undefined } 

因为在您的模式中,您将产品定义为一组对象。 您需要尝试如下所示:

 products: { name:{type:String, index:true}, startDate:Date, endDate:Date }, 

这将存储一个空的对象,而不是一个数组。