win*_*zer 23 mongoose mongodb node.js
我正在尝试使用我的node.js应用程序开始使用Mongoose作为MongoDB的ODM.我注意到当我设计一个带有嵌入式文档的模式时,如果我没有为它添加值,它会在Mongo中存储一个空白数组"[]".为什么是这样?我正在尝试将历史更改存储到记录中,并且空白数组将意味着该更改删除了该值.这是一个示例模式.
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}},
})
Run Code Online (Sandbox Code Playgroud)
当我使用名称和子域保存文档时,这是生成的文档.
{
"name": "Smith Company",
"products": [],
"subdomain": "smith"
}
Run Code Online (Sandbox Code Playgroud)
为什么默认情况下会添加带有空白数组的产品,如何阻止它?
Ins*_*dJW 14
空白数组为您提供了从模型中添加或删除元素的便捷方法.
$push $addToSet $pull 在更新中将帮助您管理您的数组元素.
如果您没有空白数组,则无法将元素推送到 null
但它可能在空白数组中.
Ang*_*hen 14
您可以通过定义以下架构来解决此问题:
products: {
type: [{
name:String,
startDate:Date,
endDate:Date
}],
default: undefined
}
Run Code Online (Sandbox Code Playgroud)
小智 13
默认情况下,数组具有[]值。你可以覆盖:
var UserSchema = new Schema({
followers : {
type: [String],
default: undefined
}
})
Run Code Online (Sandbox Code Playgroud)
因为在您的架构中,您将产品定义为对象数组。你需要尝试类似的事情:
products: {
name:{type:String, index:true},
startDate:Date,
endDate:Date
},
Run Code Online (Sandbox Code Playgroud)
这将存储一个空对象而不是数组。
| 归档时间: |
|
| 查看次数: |
11058 次 |
| 最近记录: |