如何在定义类型的猫鼬模式中设置不同类型的 属性?
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
类型,那么它需要包含 ObjectID
s。如果你希望能够在其中保存字符串,那么它需要是 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" 吗?
我为论坛上的用户配置文件设置了 Mongoose 架构。我想要做的是将用户的论坛标题设置为 ObjectID
并引用标题架构。我已经设置了这部分。但是默认情况下,我希望此字段是一个名为 "Noob" 的字符串,直到从用户的个人资料设置标题,然后将此值更改为 ObjectID
引用数据库中的标题。
title: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Title',
default: 'Noob'
},
这就是我所拥有的,基本上也是我想要实现的,但是这会引发错误,因为我设置的默认值是一个字符串而不是 ObjectID
。我不确定如何实现此目标或我可能有哪些替代方案。
你可以把它变成一个字符串:
title: {
type: String,
ref: 'Title',
default: 'Noob'
},
您以后仍然可以将其设置为 ObjectID
外观的字符串。
你不能同时拥有它:如果你想让一个字段成为 ObjectID
类型,那么它需要包含 ObjectID
s。如果你希望能够在其中保存字符串,那么它需要是 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" 吗?