win*_*ith 6 mongoose mongodb node.js
我正试图在我的一个模型中有一个"可选的"嵌套文档.这是一个示例模式
var ThingSchema = mongoose.Schema({
name: String,
info: {
'date' : { type: Date },
'code' : { type: String },
'details' : { type: Object }
}
})
var Thing = mongoose.model('Thing', ThingSchema);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我希望"info"属性可能为null(不是必需的),并且将具有检查信息是否为null/undefined的应用程序逻辑.
不幸的是,即使在mongo的文档中未定义'info'属性,mongoose仍然会在检索到的模型中返回一个'info'字段的对象.
例如,当我运行此代码时,'info'对象填充了一个(空)对象.
var thingOne = new Thing({
name: "First Thing"
})
thingOne.save(function(err, savedThing) {
if (savedThing.info) {
//This runs, even though the 'info' property
//of the document in mongo is undefined
console.log("Has info!");
}
else console.log("No info!");
})
Run Code Online (Sandbox Code Playgroud)
我尝试像下面那样定义ThingSchema
var ThingSchema = mongoose.Schema({
name: String,
info: {
type: {
'date' : { type: Date },
'code' : { type: String },
'details' : { type: Object }
},
required: false
}
})
Run Code Online (Sandbox Code Playgroud)
这允许我从数据库中检索未定义的"info"属性,但这样做可以让我打破"info"架构并添加随机属性,如
savedThing.info.somePropertyThatDoesNotExistInTheSchema = "this shouldn't be here";
Run Code Online (Sandbox Code Playgroud)
然后将持久保存到数据库.此外,如果"info"属性包含任何其他嵌套文档,更新它们不会将Thing模型标记为脏,这意味着我必须手动将路径标记为已修改(通过thing.markModified(path))
有没有办法完成我想要做的事情?对此有什么最佳做法吗?我只是完全错误地使用mongoose模式吗?
我需要
| 归档时间: |
|
| 查看次数: |
1142 次 |
| 最近记录: |