2012-05-19 17 views
12

此處的示例如何在MongoDB中進行類型檢查?

http://mongoosejs.com/docs/populate.html

提供以下代碼

var story1 = new Story({ 
     title: "A man who cooked Nintendo" 
    , _creator: aaron._id 
    }); 

_creator以上如下

_creator : { type: Schema.ObjectId, ref: 'Person' } 

定義。如果我修改代碼以下面

var story1 = new Story({ 
     title: "A man who cooked Nintendo" 
    , _creator: {name: 'test'} 
    }); 

這似乎數據高高興興地插入到MongoDB的。

{ "title" : "A man who cooked Nintendo", "_creator" : { "name" : "test" }, "_id" : ObjectId("4fb7a55315c5f2de07000002"), "fans" : [ ] } 

如何在插入前捕獲錯誤?我想檢查它不僅是一個ObjectId,而且它對應於一個有效的Person。

回答

20

要繼續@JohnnyHK什麼建議,這裏是一個完整的解決方案(假設_creator是一個數字ID的引用)。

如果要檢查值是一個有效的ObjectId

function isObjectId(n) { 
    return mongoose.Types.ObjectId.isValid(n); 
} 

驗證:驗證器, '我的錯誤類型']

_creator : { type: Schema.ObjectId, ref: 'Person', validate: isObjectId } 
+3

這給出了'TypeError:Object function ObjectId(key,options){SchemaType.call(this,key,options,'ObjectID'); }有沒有方法「isValid'' – Tom

+6

我相信他們已經把它改爲: 'mongoose.Types.ObjectId.isValid()' – herbyme

+0

更新,謝謝@herbyme –

1

你可以添加驗證架構描述here的_creator領域。

_creator : { type: Schema.ObjectId, ref: 'Person', validate: ... } 
6

的方法IsValid不存在(了嗎? ),你最好的賭注是一個簡單的正則表達式,如所提供的here

+4

我相信他們已經把它改爲: 'mongoose.Types.ObjectId.isValid()' – herbyme

相關問題