我有一个代表玩家的猫鼬模型,希望能够获取该玩家,并且在选择该玩家时,希望像吸气剂一样调用isReady
。
模型看起来像这样:
const PlayerSchema = new Schema({
user: { type: Schema.Types.ObjectId, ref: "User" },
famousPerson: { type: String }
})
PlayerSchema.methods.isReady = function (cb) {
return Boolean(this.famousPerson)
}
而且我希望能够这样称呼它:
const player = await PlayerModel
.findOne({_id: playerId})
.select(["_id", "username", "isReady"])
我是否可以将类的方法设置为吸气剂?
您可以使用virtual property:
在Mongoose中,虚拟是未存储在MongoDB中的属性。虚拟通常用于文档上的计算属性。
PlayerSchema.virtual('isReady').get(function () {
return Boolean(this.famousPerson);
});
正如mickl指出的那样,您可以使用猫鼬虚拟机,但是要按预期工作,您需要配置架构以使其返回虚拟机,因为默认情况下将不包括虚拟机。
const PlayerSchema = new Schema(
{
famousPerson: { type: String },
},
{
toJSON: { virtuals: true },
toObject: { virtuals: true },
}
);
PlayerSchema.virtual("isReady").get(function () {
return Boolean(this.famousPerson);
});