带有打字稿的MongoDB聚合
Posted
技术标签:
【中文标题】带有打字稿的MongoDB聚合【英文标题】:MongoDB aggregation with typescript 【发布时间】:2021-08-25 11:24:48 【问题描述】:我有一个用户模型,我想执行通用聚合。表示我传递给它执行的这个函数的任何对象数组。
这是getUser函数的示例
public async getUser(aggregate: object): Promise<ResponseDTO>
let response = as ResponseDTO;
const [err, user] = await To(User.aggregate(aggregate));
if (user)
response = success: true, data: user, message: "User fround" ;
else
response = success: false, message: "User not fround" ;
return response;
我把它作为参数传递
const query = [
$match:
name:"Jon"
,
$project:
_id:1
]
const userRes = await getUser(query);
但我无法运行程序,它在 getUser 函数上出现语法错误
*(method) 模型.aggregate(pipeline?: any[] | undefined): Aggregate (+1 重载)
'Aggregate' 类型的参数不可分配给'Promise' 类型的参数。 类型“Aggregate”缺少类型“Promise”中的以下属性:[Symbol.toStringTag], finally*
我试图在 getUser 参数中将对象更改为任何、数组或数组
这里是错误的SS
PS:我用的是 node 和 typescript,IDE 是 VSCode
【问题讨论】:
你能发布整个错误(格式正确)吗?还有你在这个 sn-p 中使用了哪些库? @Max,我刚刚更新了问题 【参考方案1】:Mongoose 查询有自己的类型,您应该使用这些类型来避免此类错误。
您可以直接从 Mongoose 包中导入这些类型来满足您的任何需求。
我强烈建议使用 Typegoose 包,它有助于创建完全类型化的 MongoDB 模式。这样您就可以将这些类型用作响应、查找和更新查询等等! 参考: https://typegoose.github.io/typegoose/docs/guides/quick-start-guide
正确类型的用法示例:
import FilterQuery from 'mongoose';
public async getUser(aggregate: FilterQuery<ResponseDTO>): Promise<ResponseDTO>
let response = as ResponseDTO;
const [err, user] = await To(User.aggregate(aggregate));
if (user)
response = success: true, data: user, message: "User fround" ;
else
response = success: false, message: "User not fround" ;
return response;
【讨论】:
感谢您的回复,我也试过了。不为我醒来以上是关于带有打字稿的MongoDB聚合的主要内容,如果未能解决你的问题,请参考以下文章