如何在 Typescript 上做猫鼬模型自我参考?

Posted

技术标签:

【中文标题】如何在 Typescript 上做猫鼬模型自我参考?【英文标题】:How to do mongoose model self reference on Typescript? 【发布时间】:2020-07-20 23:34:10 【问题描述】:

我有一个模型:

const comment = new mongoose.Schema(
  id:  type: ObjectId, required: true ,
  comment:  type: String ,
  replies: [comment]
);

想要创建这样的文档:


  "id": 1,
  "comment": "Grand Parent Comment",
  "replies": [
    
      "id": 11,
      "comment": "Parent Comment",
      "replies": [
        
          "id": 111,
          "comment": "Comment",
          "replies": [
            
              "id": 1111,
              "comment": "Child Comment",
              "replies": []
            
          ]
        ,
        
          "id": 112,
          "comment": "Sibling Comment",
          "replies": []
        
      ]
    
  ]

根据这个answer的回答

只需使用this作为模型的参考即可解决。

  const comment = new mongoose.Schema(
    id:  type: ObjectId, required: true ,
    comment:  type: String ,
-   replies: [comment]
+   replies: [this]
  );

当我尝试使用 Typescript 时,会出现如下错误:

'this' 隐含类型为 'any',因为它没有类型注释。

在 typescript 上使用猫鼬书写建模自我引用的任何最佳实践。

【问题讨论】:

我看到的区别是你用 const 声明而示例答案用 var 声明,也许? sorry我觉得没什么区别,因为当我尝试用“var”或“const”声明时,还是会出现同样的错误。 【参考方案1】:

您可以尝试分两步执行此操作,而不是使用add 方法:

const schema = new mongoose.Schema(
  body: String,
);

schema.add(
 children: [schema]
);

【讨论】:

以上是关于如何在 Typescript 上做猫鼬模型自我参考?的主要内容,如果未能解决你的问题,请参考以下文章

如何在猫鼬(打字稿)中获取模型的_id

使用猫鼬模型设置打字稿

用打字稿中的子文档描述猫鼬模型

打字稿:猫鼬模式的静态方法

诺基亚6300如何做猫无线上网

如何使 typescript 与 Promise 一起使用?