如何在定义类型的猫鼬模式中设置不同类型的 属性?

How do I set a different type of property in mongoose schema from the defined type?

我为论坛上的用户配置文件设置了 Mongoose 架构。我想要做的是将用户的论坛标题设置为 ObjectID 并引用标题架构。我已经设置了这部分。但是默认情况下,我希望此字段是一个名为 "Noob" 的字符串,直到从用户的个人资料设置标题,然后将此值更改为 ObjectID 引用数据库中的标题。

title: {
  type: mongoose.Schema.Types.ObjectId,
  ref: 'Title',
  default: 'Noob'
},

这就是我所拥有的,基本上也是我想要实现的,但是这会引发错误,因为我设置的默认值是一个字符串而不是 ObjectID。我不确定如何实现此目标或我可能有哪些替代方案。

你可以把它变成一个字符串:

title: {
  type: String,
  ref: 'Title',
  default: 'Noob'
},

您以后仍然可以将其设置为 ObjectID 外观的字符串。

你不能同时拥有它:如果你想让一个字段成为 ObjectID 类型,那么它需要包含 ObjectIDs。如果你希望能够在其中保存字符串,那么它需要是 String.

类型

如果 title 是对另一个集合中 ObjectID 的引用,Mongoose 在执行查找时仍会将 ObjectID-ish 字符串转换为 ObjectID :

如果 doc.title 是字符串,

Title.find({ _id: doc.title }) 仍会查找 ObjectID

由于您已经指出出于性能原因您希望保留强类型 ObjectId,因此您必须使用与默认类型相同的类型。您可以使用全 0 的 ID,例如:

title: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "Title",
    default: 00000000-0000-0000-0000-000000000000
}

然后您可以检查它并稍后显示 "Noob" 吗?