在 Mongoose Schema 中使用雪花作为类型
Posted
技术标签:
【中文标题】在 Mongoose Schema 中使用雪花作为类型【英文标题】:Using Snowflake as Type inside Mongoose Schema 【发布时间】:2021-09-06 09:04:02 【问题描述】:背景:Discord.js 使用雪花识别许多项目(消息、成员、公会等)。在我的场景中,我使用雪花作为公会内部成员的唯一标识符以及我的 MongoDB 数据库中的主键。
问题:我想在我的 Mongoose 架构中使用 Discord 的 Snowflake 作为类型:
import Snowflake from 'discord.js';
import Schema from 'mongoose';
const MembershipSchema: Schema = new Schema(
discordID: type: Snowflake, required: true, unique: true ,
);
但是,我从 VSCode 的 Intellisense 收到一个错误,告诉我 'Snowflake' only refers to a type, but is being used as a value here.
我很困惑,因为我对 Discord.js 文档的解释是 Snowflake
是一种类型(本质上只是 string
)。
我绝对可以简单地使用 string
代替,但我想知道是否有任何方法可以使其工作类似于我上面显示的方式。我希望明确指出,discordID
字段中的值必须是 Snowflake
,而不是任何旧字符串。
【问题讨论】:
Snowflake 只是一个字符串,你可以说 String 不是吗? @MrMythical 是的,你可以简单地使用一个字符串 【参考方案1】:我发现执行类型的最合适方法部分包括@MrMythical 和@Toasty 提供的答案。但是,他们的答案不完整,不应该完全遵循以实现我的目标。
基本上,经过几个小时的研究,我发现的解决方案是在模型创建时简单地添加一个打字界面。至少在 VSCode 中,Intellisense 会识别这一点,并会根据接口中的内容强制定义模式参数的类型。
一个例子如下所示:
MembershipModel.ts
import model, Schema from 'mongoose';
import Membership from '../interfaces/MembershipStorage';
const MembershipSchema: Schema = new Schema(
discordID: type: String, required: true, unique: true ,
ieeeID: type: String, required: true, unique: true ,
,
collection: 'members',
minimize: false,
strictQuery: true,
);
export default model<Membership>('Member', MembershipSchema);
MembershipStorage.ts
import Snowflake from 'discord.js';
export default interface Membership
discordID: Snowflake;
ieeeID: string;
【讨论】:
以上是关于在 Mongoose Schema 中使用雪花作为类型的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Mongoose 中使用 MixedId 字段和另一个字段作为 ObjectId 的连接
Mongoose Schema 类型作为 TypeScript 的自定义接口?