当前位置: 首页 > 知识库问答 >
问题:

什么是包含ref但不指定类型的Mongoose模型属性?

陆弘新
2023-03-14

对Mongoose来说非常陌生--我正在处理一个现有的项目,并且被赋予了更改一些模型属性的任务。我理解如果模型包含这种类型的属性

postedBy: {
  type: mongoose.Schema.Types.ObjectId,
  ref: 'User'
}

此属性引用了另一个模型/模式,要访问该链接的模型/模式,需要填充它以访问此属性。

但是在我正在审查的代码中(我没有写)有许多这种类型的属性

contentTypes: [{ ref: 'ContentType' }],
source: { ref: 'Source',required: true },

其中引用了另一个架构,但没有类型。这是同一种关系吗,并且id是隐含的?这是子文档吗?

另外一个问题是:如果在模型中我想引用链接模型(或模式)的属性,我是否需要先填充?也就是说,如果它是一个子文档,我可以使用点符号,但如果它是一个“链接”文档,我不确定。

共有1个答案

钱钊
2023-03-14

答案是模型模式不是独立的,而是传递给模型“工厂”,工厂为它们提供所需的属性类型。

因此,从该工厂获得以下代码片段(如下)。我查看了mongoose autopopulate的文档,没有看到autopopulate=true的含义。

new: function(name, properties, statics, methods, schemaMods) {
// Add default definition to properties with references and load reference schemas
Object.keys(properties).forEach(function(key) {
  var modifiedProperty = (property) => {
    if (property.ref) {
      property.autopopulate = true;
      property.type = mongoose.Schema.Types.ObjectId;
    }

    return property;
  };

  if (Array.isArray(properties[key]) && properties[key].length === 1) {
    properties[key][0] = modifiedProperty(properties[key][0]);
  } else {
    properties[key] = modifiedProperty(properties[key]);
  }
});
 类似资料:
  • 问题内容: 我实际上是从(.NET)学习golang的,对此语言我一无所知。有时我会发现这种声明: https://github.com/golang/crypto/blob/master/ed25519/ed25519.go 到底是什么意思?它是从[] byte继承的结构吗? 只是别名吗? 我以为golang禁止继承。 问题答案: 这是一个类型声明,更具体地说是一个 类型定义 。它创建一个新类型

  • 本文向大家介绍MySQL ENUM数据类型的不同属性是什么?,包括了MySQL ENUM数据类型的不同属性是什么?的使用技巧和注意事项,需要的朋友参考一下 可以使用以下影响允许值的属性来定义MySQL ENUM类型- NOT NULL-  在ENUM类型中,默认情况下允许NULL值。要禁止NULL值,我们需要在描述ENUM列时使用NOT NULL属性。 NULL  -NULL属性是DEFAULT

  • 我一直试图得到我在组件中指定的protype。 在我的组件中,我有一个静态对象类型: 现在我一直在想我是否能够得到我指定的PropTypes类型。如果我记录组件的proptypes,它会显示proptypes的值是一个函数。 有没有办法让指定的类型离开那里?

  • 问题内容: 抱歉,标题似乎令人困惑,但请按示例进行操作。 假设我有一些带有通用类型参数的Java类: 我可以创建一个类型为存储对象的变量,并将通用参数设置为。Java还允许我将该变量分配给另一个变量,但将通用参数设置为通配符类型: 但是,在使用具有泛型参数的类时,如果将该参数的类型设置为泛型,则无法将该类的对象分配给相同类型/泛型的类型,后者(内部/嵌套)参数是通配符类型: 具体的编译错误是: 凭

  • 我想在swagger中建模一个包含一组不同类型对象的响应对象,如下所示: 我尝试了下面的解决方案,但它将所有属性包装在一个对象中 { [ { "用户": [], "客户": [] } ] }.

  • 下面对getHighest()和getLowest()的调用返回Comparable类型的对象,而不是T类型的对象,这正是我们想要的。为什么,我该如何改进这段代码,使这些调用返回T(这样T的字段和方法就可用了)? 下一行生成编译器错误: 错误:找不到符号符号:方法getName()位置:接口java.lang.Comparable 我想employee.getHighest()返回一个员工(而不仅