2012-05-19 39 views
12

Ví dụ dưới đâyTôi làm cách nào để kiểm tra kiểu trong MongoDB?

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

Cung cấp đoạn mã sau

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

_creator được định nghĩa trên như sau

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

Nếu tôi thay đổi mã để sau

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

Dường như vui vẻ chèn dữ liệu vào MongoDB.

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

Làm cách nào để nhận lỗi trước khi chèn? Tôi muốn kiểm tra xem nó không chỉ là một ObjectId mà còn là nó tương ứng với một Person hợp lệ.

Trả lời

20

Để tiếp tục những gì @JohnnyHK đề xuất, đây là giải pháp hoàn chỉnh (giả sử _creator là tham chiếu đến id số).

Nếu bạn muốn kiểm tra nếu giá trị là một ObjectId hợp lệ

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

Validate: [validator, 'loại lỗi của tôi']

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

điều này cung cấp 'TypeError: Object function ObjectId (khóa, tùy chọn) {SchemaType.call (this, key, options, 'ObjectID'); } không có phương pháp 'isValid'' – Tom

+6

Tôi tin rằng họ đã thay đổi nó để: ' mongoose.Types.ObjectId.isValid() ' – herbyme

+0

cập nhật, nhờ @herbyme –

1

Bạn có thể thêm xác thực vào trường _creator của lược đồ như được mô tả here.

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

Phương pháp này isValid không tồn tại (nữa?), đặt cược tốt nhất của bạn là biểu thức chính quy đơn giản, như được cung cấp here

+4

Tôi tin rằng họ đã thay đổi nó để: 'mongoose.Types.ObjectId.isValid()' – herbyme

Các vấn đề liên quan