2017-02-03 63 views
0

我在论坛上为用户配置文件设置了Mongoose架构。我想要做的是将用户的论坛标题设置为ObjectID并引用标题架构。我已经设置了这个部分。然而,默认情况下,我希望这个字段是一个名为“Noob”的字符串,直到从用户的配置文件中设置标题,然后将该值更改为引用数据库中的标题的ObjectID如何在定义的类型中为猫鼬模式设置不同类型的属性?

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

这是我,基本上我想达到什么样的,但是这是因为我设置的默认值是一个字符串,而不是一个ObjectID抛出一个错误。我不知道如何实现这个目标,或者我可能有什么替代方案。

+1

为什么不设置'string'类型,并且在设置标题后将ObjectId转换为'string'? – brandonscript

+0

@brandonscript所以它以字符串开头。那么当用户第一次将它设置为ObjectID?我仍然可以离开“参考:'标题'”这样做吗? –

+0

不,我的意思是在飞行中,将ObjectId转换为字符串'this.objectid.toString()' – brandonscript

回答

1

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

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

然后,您可以检查这一点,并在其位置显示“菜鸟”以后呢?

+0

这似乎是我用例的最佳答案。起初我没有想到这件事,但它肯定可以奏效。谢谢! –

0

你可以只让一个字符串:

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

,您仍然可以将其设置为ObjectID后-looking字符串。

你不能两种方式:如果你想要一个字段是ObjectID类型,那么它需要保持ObjectID s。如果你想能够保存字符串,那么它需要是String

如果title是另一个集合到一个ObjectID参考,猫鼬仍然会投一个ObjectID -ish串到ObjectID当执行查找:

Title.find({ _id: doc.title })仍然会寻找一个ObjectID如果doc.title是一个字符串。

相关问题