使用 Mongoose 混合模式选择集合属性的问题
Issue selecting collection properties using Mongoose mixed schema
我正在从事一个涉及从外部源创建页面的项目。由于这些外部资源本质上是可变的,因此我无法严格定义要使用的模式。所以我做了一些研究并了解了 Mongoose 的 Mixed schema type 并创建了以下模型:
var PageTemplate = new mongoose.Schema(
{
},
{
strict: false
}
);
在导入过程中,我执行了更新插入操作来更新现有条目并插入新条目:
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
}
);
我正在从事一个涉及从外部源创建页面的项目。由于这些外部资源本质上是可变的,因此我无法严格定义要使用的模式。所以我做了一些研究并了解了 Mongoose 的 Mixed schema type 并创建了以下模型:
var PageTemplate = new mongoose.Schema(
{
},
{
strict: false
}
);
在导入过程中,我执行了更新插入操作来更新现有条目并插入新条目:
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
}
);