作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在尝试在我的一个模型中添加一个“可选”嵌套文档。这是一个示例架构
var ThingSchema = mongoose.Schema({
name: String,
info: {
'date' : { type: Date },
'code' : { type: String },
'details' : { type: Object }
}
})
var Thing = mongoose.model('Thing', ThingSchema);
在这种情况下,我希望“info”属性可能为空(不是必需的),并且将具有检查信息是否为空/未定义的应用程序逻辑。
不幸的是,即使在 mongo 的文档中未定义 'info' 属性,mongoose 仍然会为我返回一个对象,用于检索到的模型中的 '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!");
})
我尝试如下定义 ThingSchema
var ThingSchema = mongoose.Schema({
name: String,
info: {
type: {
'date' : { type: Date },
'code' : { type: String },
'details' : { type: Object }
},
required: false
}
})
这允许我从数据库中检索未定义的“信息”属性,但这样做可以打破“信息”模式并添加随机属性,例如
savedThing.info.somePropertyThatDoesNotExistInTheSchema = "this shouldn't be here";
然后将被持久化到数据库中。此外,如果“info”属性包含任何进一步的嵌套文档,更新它们不会将 Thing 模型标记为脏,这意味着我必须手动将路径标记为已修改(通过 thing.markModified(path))
有什么方法可以完成我想做的事情吗?有没有这方面的最佳实践?我只是完全错误地使用了 Mongoose 模式吗?
我需要
最佳答案
Mongoose 会将任何返回的文档转换为用于定义模型的架构。
关于持久化到数据库的任意路径,您可以使用 strict
抛出错误而不是静默删除它(默认情况下应该这样做)。
关于node.js - Mongoose 可选嵌套属性 - 检查空/未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27851267/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!