我在论坛上为用户个人资料设置了Mongoose架构。我想要做的是将用户的论坛标题设置为ObjectID
并引用标题架构。我已经设置了这个部分。但是,默认情况下,我希望此字段是一个名为“Noob”的字符串,直到从用户的配置文件设置标题,然后将该值更改为引用数据库中标题的ObjectID
。
title: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Title',
default: 'Noob'
},
这就是我所拥有的,基本上是我想要实现的,但是这会引发错误,因为我设置的默认值是字符串而不是ObjectID
。我不确定如何实现这个或者我可能有什么替代方案。
答案 0 :(得分:1)
由于您已经指出要出于性能原因要维护强类型ObjectId
,因此您必须使用与默认类型相同的类型。您可以使用全0的id,例如:
title: {
type: mongoose.Schema.Types.ObjectId,
ref: "Title",
default: 00000000-0000-0000-0000-000000000000
}
然后您可以检查并显示" Noob"取而代之的?
答案 1 :(得分:0)
你可以把它变成一个字符串:
title: {
type: String,
ref: 'Title',
default: 'Noob'
},
您仍然可以将其设置为ObjectID
- 稍后查找字符串。
您不能两种方式:如果您希望字段为ObjectID
类型,则需要保留ObjectID
个。如果您希望能够在其中包含字符串,则它必须是String
类型。
如果title
是对另一个集合中ObjectID
的引用,则Mongoose在执行查找时仍会将ObjectID
- ish字符串转换为ObjectID
:< / p>
如果Title.find({ _id: doc.title })
是字符串,
ObjectID
仍会查找doc.title
。