Faz*_*zal 9 aggregation mongodb node.js typescript
我有一个用户模型,我想执行通用聚合。表示我传递给它执行的该函数的任何对象数组。
这是 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;
}
Run Code Online (Sandbox Code Playgroud)
我将其作为参数传递
const query = [
{
$match: {
name:"Jon"
}
},
{
$project:{
_id:1
}
}
]
const userRes = await getUser(query);
Run Code Online (Sandbox Code Playgroud)
但我无法运行该程序,它在 getUser 函数上给我语法错误
*(方法)模型<任何,任何,任何> .aggregate(管道?:任何[] |未定义):聚合<任何[]>(+1重载)
“Aggregate<any[]>”类型的参数不可分配给“Promise”类型的参数。类型“Aggregate<any[]>”缺少类型“Promise”中的以下属性:[Symbol.toStringTag],最后*
我尝试将 getUser 参数中的对象更改为任何数组或数组
PS:我使用的是带有 typescript 的 Node,IDE 是 VSCode
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9024 次 |
| 最近记录: |