Mongodb/Mongoose 类型聚合不兼容

Mongodb/Mongoose types aggregation incompatibility

将 nodejs 服务器迁移到较新版本的 mongoose 后,我遇到了一个涉及 $sort 聚合的奇怪的打字稿错误。

我的版本

依赖项 “猫鼬”:“^6.2.10”,

开发依赖 "@types/mongoose": "^5.11.97", “打字稿”:“^4.6.3”

我简化了代码。

export const timetableTest = (group: string): Promise<IGroupTimetableEvents[]> => {
    const agg = [{ $match: { group } }, { $sort: { reference: 1 } }];
    const result = GroupEvent.aggregate(agg).exec();
    return result;
};

GroupEvent.aggregate(agg) 不接受 agg 变量,我看到下面的消息。

参数类型 '({ $match: { group: string; }; $sort?: undefined; } | { $sort: { reference: number; }; $match?: undefined; })[] ' 不可分配给 'PipelineStage[]' 类型的参数。 输入'{ $match: { group: string; }; $排序?:未定义; } | { $排序:{ 参考:数字; }; $匹配?:未定义; }' 不可分配给类型 'PipelineStage'。 输入 '{ $sort: { 参考:数字; }; $匹配?:未定义; }' 不可分配给类型 'PipelineStage'。 输入 '{ $sort: { 参考:数字; }; $匹配?:未定义; }' 不可分配给类型 'Sort'。 属性 '$sort' 的类型不兼容。 输入'{参考:数字; }' 不可分配给类型 'Record<string, 1 | -1 | { $meta: "textScore"; }>'。 属性 'reference' 与索引签名不兼容。 类型 'number' 不可分配给类型 '1 | -1 | { $元:“textScore”; }'.ts(2345)

我看到问题来自TS,不过,我提供的1(数字)看起来不被接受。

Type 'number' is not assignable to type '1 | -1 | { $meta: "textScore"; }'

迁移之前,我没有遇到这个错误,compilation/code执行没问题。

请让我知道我缺少什么。

我目前面临同样的问题,作为解决方法,我想出了这个:

const sort: Record<string, | 1 | -1 | {$meta: "textScore"}> = { reference: 1 };

export const timetableTest = (group: string): Promise<IGroupTimetableEvents[]> => {
    const agg = [{ $match: { group } }, { $sort: sort }];
    const result = GroupEvent.aggregate(agg).exec();
    return result;
};