假设我有User
模型,如below
import { Schema, model, Types, HydratedDocument } from "mongoose";
interface IUser {
_id: Types.ObjectId;
name: string;
parent: Types.ObjectId;
}
interface IUserPopulate {
parent: IUser;
}
type MergePopulate<I, IP> = Omit<HydratedDocument<I>, keyof IP> & IP;
const UserSchema = new Schema<IUser>({
name: String,
parent: { type: Schema.Types.ObjectId, ref: "users" },
});
const UserModel = model("users", UserSchema);
字符串
然后通过UserModel#find
方法查找用户
async function getUser() {
const users = await UserModel.find().populate<IUserPopulate>("parent");
users.forEach((user) => {
processUser(user);
});
}
型
和函数处理用户接受填充的用户文档
async function processUser(user: MergePopulate<IUser, IUserPopulate>) {
//do some thing
}
型
Typescript在使用find()
时接受用户文档,但在使用findOne
或findById
时不接受
const user = await UserModel.findOne().populate<IUserPopulate>("parent");
processUser(user); //throw alot of error here
型
如何为两个查询定义接口?
注意:这是为mongoose < 7工作,我只是在升级mongoose到7.3.0时得到这个错误
2条答案
按热度按时间eiee3dmh1#
findOne
和findById
返回一个文档或null
,因此您必须添加一个测试来消除它们返回null
的情况:字符串
Playground
llew8vvj2#
找到了
字符串
然后我可以使用合并填充的接口来填充文档