【发布时间】:2018-01-07 07:32:40
【问题描述】:
对 Mongoose 来说非常陌生——我正在处理一个现有项目,并被赋予了更改某些模型属性的任务。我知道如果模型包含这种类型的属性
postedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
此属性引用另一个模型/架构,并且要访问该链接模型/架构,需要populate 它才能访问此属性。
但是在我正在审查的代码中(不是我写的)有很多这种类型的属性
contentTypes: [{ ref: 'ContentType' }],
source: { ref: 'Source',required: true },
引用了另一个模式,但没有类型。这是同一种关系吗?暗示id?这是子文档吗?
另外一个问题:如果在模型中我想引用链接模型(或模式)的属性,我需要先populate 吗?也就是说,如果它是一个子文档,我可以使用点符号,但如果它是一个“链接”文档,我不确定。
【问题讨论】:
-
没有类型会抛出错误 TypeError: Undefined type
Sourceatsource.ref。似乎是无效的架构定义。你能运行代码来创建文档吗? -
是的——这是我作为初级开发人员在编写了大量代码后加入的一个大型项目。我相信我看到了我的方式的错误,因为所有这些模式都被传递给模型“工厂”,该模型“工厂”设置了 os objectID 类型,我认为它可以解决所有问题——我应该在代码中进一步阅读.
-
因此,在模型工厂中我们有如下代码sn -p:
-
new: function(name, properties, statics, methods, schemaMods) { // 将默认定义添加到具有引用的属性并加载引用模式 Object.keys(properties).forEach(function(key) { var modifiedProperty = (property) => { if (property.ref) { property.autopopulate = true; property.type = mongoose.Schema.Types.ObjectId; } return property; };