我正在开发一个涉及从外部源创建页面的项目。由于这些外部源本质上是可变的,因此我无法严格定义要使用的架构。所以我做了一些研究并了解了Mongoose的Mixed schema type并创建了以下模型:
var PageTemplate = new mongoose.Schema(
{
},
{
strict: false
}
);
在导入过程中,我执行upsert操作来更新现有条目并插入新条目:
PageTemplate
.findOneAndUpdate(
{
slug: page.slug
},
page,
{
upsert: true
}
);
到目前为止,一切都很顺利。当我稍后尝试获取条目时出现问题。当我console.log
整个物体时,我得到了我所期望的 - 整个物体。出于某种原因,当我去访问一个属性时,我得到undefined
。
PageTemplate.findOne(
{
slug: slug
},
function(err, page) {
console.log(page); // Prints entire object
console.log(page.slug); // Undefined
}
)
我是否误解了混合模式应该如何表现?我需要执行提交操作吗?例如,对于一个简单的插入,我会这样做:
var page = new PageTemplate(data);
page.save();
非常感谢任何正确方向的推动。
注意:我的代码片段已经过简化,以演示我如何设置项目。如果需要更多上下文,请告诉我,我会更新我的问题。
编辑:可能值得注意的是,这只是未在架构中明确定义的属性的情况。如果我使用显式定义的字段定义模式,我可以正确访问它们,但这似乎打败了混合类型模式的目的:
var PageTemplate = new mongoose.Schema(
{
slug: String
},
{
strict: false
}
);