2017-02-03 71 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是一個字符串。

相關問題