为什么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 },
这将存储一个空的对象,而不是一个数组。