问题标签 [typegoose]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1725 浏览

mongodb - Typegoose 模型和多对多关系

所以我正在使用 NestJs 和 Typegoose 构建一个后端,具有以下模型:

用户

正如您可能猜到的,一个用户可能在多个部门,一个部门可以有多个成员(用户)。由于部门的数量或多或少受到限制(与用户相比),我决定使用一种方式嵌入,如下所述:两种方式嵌入与 MongoDB 中的一种方式嵌入(多对多)。这就是用户持有数组“memberOfDepartments”的原因,但部门不保存成员数组(因为缺少@prop)。

第一个问题是,当我请求 Department-object 时,如何查询它的成员?查询必须查找department._id 在数组memberOfDepartments 中的用户。

我在这里尝试了多种东西,例如虚拟填充:https://typegoose.github.io/typegoose/docs/api/virtuals/#virtual-populate在 department.model 上像这样:

但它不会输出该属性。我的猜测是,这仅适用于一个站点上的一对多...我也尝试使用 set/get,但在使用 DepartmentModel 中的 UserModel 时遇到了麻烦。

目前我在服务中这样做是在“作弊”:

..但我认为这不是正确的解决方案,因为我猜它属于模型。

第二个问题是,我将如何处理一个部门的删除,导致我必须删除对该部门的引用。在用户?

我知道那里有 mongodb 和 mongoose 的文档,但我无法理解如何“以 typegoose 方式”完成此操作,因为 typegoose 文档对我来说似乎非常有限。任何提示表示赞赏。

0 投票
1 回答
1766 浏览

typescript - Typegoose 和 NestJS:类型上不存在属性“保存”

我正在为我的后端服务器使用 typegoose 和 nestjs。我的pages.service.ts文件中已经有一个函数可以按 ID 获取单个页面,称为getPageById(). 当我尝试从pages.services.ts文件中的另一个调用此函数时,打字稿出现以下错误:

我的page.model.ts文件看起来像这样

我的pages.service.ts文件看起来像这样

我需要什么才能让这个工作?

更新

我可以修复错误。我将返回类型更改为Promise<DocumentType<Page>>这样

但这是解决这个问题的最好方法吗?

0 投票
1 回答
1423 浏览

node.js - 带有子文档数组的类型鹅 ref

我正在尝试使用 Typegoose 获取嵌套的子文档数组。

在使用 Typegoose 进行重构之前,我使用 mongoose 获得了这个工作代码:

界面 :

架构:

当我执行 Family.findById('5f69aa0a56ca5426b44a86c5') 时,我的 JSON 结果中有一个 Product ObjectId 数组。

重构后,我使用 Typegoose :

班级 :

当我做 :

带有 ObjectId 数组的属性“产品”不在结果中(属性不存在):

我不知道如何使它工作。我认为问题出在家庭类@prop(ref) 中。我看到了一些人们使用 @arrayProp 但现在已弃用的示例。

我找到了关于 ref 的文档,其中包含一个简单的对象,但没有找到 Typegoose 版本 5.9.1 的对象数组。

谢谢

0 投票
1 回答
601 浏览

node.js - 如何在 typegoose 中使用更新的钩子?

我添加了一个事件pre挂钩updateOne,但它的工作方式与save事件不同......

我认为这是因为更新命令通常将匹配器作为第一个参数传递。我确实试图捕捉第二个参数,但它是一个匿名函数,我不知道如何使用。

Mongoose 文档讨论了这一点,但我不确定如何直接从 Typegoose 实际修改 Mongoose 模式。

https://mongoosejs.com/docs/middleware.html

注意:与 schema.pre('remove') 不同,Mongoose 默认在 Query#updateOne() 和 Query#deleteOne() 上注册 updateOne 和 deleteOne 中间件。这意味着 doc.updateOne() 和 Model.updateOne() 都会触发 updateOne 钩子,但这指的是查询,而不是文档。要将 updateOne 或 deleteOne 中间件注册为文档中间件,请使用 schema.pre('updateOne', { document: true, query: false })。

编辑:我刚刚更新到最新的包版本不再给出错误,但类型不同。

并且智能感知会检测此 pre updateOnevs savehooks的不同类型

pre.updateOne =any

在此处输入图像描述

预存=this: DocumentType<Question>

在此处输入图像描述

0 投票
1 回答
245 浏览

mongodb - typegoose 中枚举的建模列表

我一直在尝试在 typegoose 中对枚举数组进行建模,如下所示,但一直出现编译错误。

我得到的错误信息是:

错误:“User.roles”的类型无效!类型为:“function String() { [native code] }” [E009]

请问我该如何正确操作?

0 投票
1 回答
164 浏览

mongodb - Typegoose 和 Mongoose - 保存模式类型的嵌套列表时,转换为 ObjectId 的值失败

收到此错误:

这是父母:

这是孩子:

这是它的调用方式:

0 投票
0 回答
49 浏览

typescript - 在带有 typegoose 的 mongoose virtuals 中这个“this”的无法识别的属性

我正在尝试在 typegoose 模型上定义一个虚拟属性。

我收到this没有属性endstart. 有没有办法让它正常工作?

谢谢

0 投票
1 回答
61 浏览

mongodb - Mongodb Ref动态填充grapqhl?

我必须根据查询请求来决定是否填充,但我不知道该怎么做。

所以例子

如果我的模型用户看起来像这样

以下语法来自 typegoose 和 typegraphql

这是两个不同的查询

查询1

查询2

在解析器中

Query1 不需要填充
,但 Query2 需要
在同一个解析器中!

我想根据查询的要求来决定是否填充。
在不知道解析器中的实际查询是什么的情况下,我无法决定是否填充。

我在 stackoverflow 中发现了非常相似的问题但是没有正确的答案... 解决 Mongoose 和 GraphQL 中的关系

0 投票
1 回答
98 浏览

intellij-idea - IDEA 无法识别 typegoose 类型的模型

尝试包含@typegoose/typegoose,遵循它的所有安装步骤,然后放置示例中提供的模型

IDEA 无法识别UserModel“创建”等 方法。屏幕

更有趣的是 - 只需将相同的空文件夹放入package.jsontsconfig.json放入索引此代码:

和 IDEA 看看需要什么 在此处输入图像描述

0 投票
1 回答
758 浏览

node.js - Typegoose + nestjs + mongodb:索引未使用@index 装饰器创建

我遇到了 typegoose 的错误。我有一个名为的模型SP,我必须在其属性上创建 2dsphere 索引,名为geoLocation我尝试过 typegoose 装饰器@index,但它无法正常工作,即使它没有抛出任何错误,我不知道发生了什么以及 typegoose 如何处理它。有没有人给我解决方案。

代码: