在打字稿中使用猫鼬填充查询
Posted
技术标签:
【中文标题】在打字稿中使用猫鼬填充查询【英文标题】:Populate a query with mongoose in typescript 【发布时间】:2019-04-06 04:30:25 【问题描述】:我在使用打字稿填充我的用户模型时遇到问题。我有一个用户方案的属性,它是对他的个人资料的引用。要使用 typescript 实现 mongoose,除了模式之外,我还必须定义一个 tpo / 接口。我的问题是我不知道必须为配置文件属性分配什么类型。因为如果我在不填充的情况下运行查询,它将是一个“ObjectId”,但如果我填充它将包含整个配置文件文档。
export type UserModel = mongoose.Document &
name: string;
username: string;
email: string;
password: string;
profile: Schema.Types.ObjectId; // If I leave this property with this type, in case I populate a typescript query it would give me an error.
;
export const UserSchema = new Schema(
name:
type: String,
required: true
,
username:
type: String,
required: true,
unique: true
,
email:
type: String,
unique: true,
required: true
,
password:
type: String,
required: true
,
profile:
type: Schema.Types.ObjectId,
ref: "Profile"
);
export default model<UserModel>("User", UserSchema);
【问题讨论】:
问题到底是什么?如何在以后的代码中查看代码帮助中的“填充”属性?请注意,“打字稿”不是“运行时检查”。所以这真的不是关于“模型”定义,而是更多关于试图访问结构的代码。如果这是您真正想要的,请参阅How to define model in combination with using mongoose populate?。 @Neil Lunn 非常感谢,这正是我想要的。现在我想我需要消除这个问题,以免留下无用的重复 【参考方案1】:我的问题是我不知道我必须为 个人资料属性。
您将需要定义 2 种类型/接口。
export default model<UserModel>("User", UserSchema);
此导出必须使用不同的界面,您可以在其中填充“配置文件”文档。
对于架构本身,您可以将其保留为 objectID 类型。
【讨论】:
【参考方案2】:尝试将填充设置为指向模型,这应该可以解决问题
User.find().populate(["path":"profile", "model":"Profile" ])
【讨论】:
非常感谢@Rodrigo Baute,但它对我不起作用。 Vscode 提供给我的方法很少(我相信是 ObjectId)以上是关于在打字稿中使用猫鼬填充查询的主要内容,如果未能解决你的问题,请参考以下文章
如何在打字稿中的猫鼬userschema.methods中使用“this”