2013-08-29 25 views
9

Tôi thích xác thực đi kèm với Mongoose. Chúng tôi đang cố gắng tìm hiểu xem liệu chúng tôi có muốn sử dụng nó hay không và đưa ra chi phí. Có ai biết nếu cung cấp tham chiếu đến bộ sưu tập cha mẹ khi tạo lược đồ mongoose, (trong lược đồ con, chỉ định id đối tượng của đối tượng cha làm trường), thì điều này có nghĩa là mỗi lần bạn cố gắng lưu tài liệu kiểm tra các bộ sưu tập cha mẹ cho sự tồn tại của id đối tượng refereneced?Mongoose có thực sự xác nhận tính tồn tại của một Id đối tượng không?

Trả lời

17

tôi đang làm nó với middleware, thực hiện tìm kiếm của nguyên tố này vào xác nhận:

ExampleSchema = new mongoose.Schema({ 

    parentId: { 
     type: mongoose.Schema.Types.ObjectId, 
     ref: 'Example' 
    } 

}); 

ExampleModel = mongoose.model('Example', ExampleSchema); 

ExampleSchema.path('parentId').validate(function (value, respond) { 

    ExampleModel.findOne({_id: value}, function (err, doc) { 
     if (err || !doc) { 
      respond(false); 
     } else { 
      respond(true); 
     } 
    }); 

}, 'Example non existent'); 
2

Không, trường ObjectId được xác định trong giản đồ của bạn dưới dạng tham chiếu đến bộ sưu tập khác không được chọn là hiện có trong bộ sưu tập được tham chiếu khi lưu. Bạn có thể làm điều đó trong middleware Mongoose, nếu cần thiết.

+0

Làm cho tinh thần. Chúng tôi đang đi với hiệu suất, giả sử chúng tôi đang mã hóa đúng và sẽ không nhập vào một id đối tượng không tồn tại. Điều đó tất nhiên có rủi ro riêng của nó, nhưng chúng tôi đang viết lại từ java vào nút để khớp với phần còn lại của kiến ​​trúc của chúng tôi, và hy vọng giải quyết một số vấn đề hiệu suất nghiêm trọng mà chúng tôi gặp phải. – CargoMeister

10

Tôi đang sử dụng mongoose-id-validator. Làm việc tốt

var mongoose = require('mongoose'); 
var idValidator = require('mongoose-id-validator'); 

var ReferencedModel = new mongoose.Schema({name: String}); 

var MySchema = new mongoose.Schema({ 
    referencedObj : { type: mongoose.Schema.Types.ObjectId, ref: 'ReferencedModel'}, 
    referencedObjArray: [{ type: mongoose.Schema.Types.ObjectId, ref: 'ReferencedModel' }] 
}); 

MySchema.plugin(idValidator); 
+0

Tôi thích điều đó. Đẹp và đơn giản. – CargoMeister

1

Bạn có thể thử https://www.npmjs.com/package/lackey-mongoose-ref-validator (Tôi đang phát triển)

Nó cũng ngăn chặn xóa nếu tham chiếu được sử dụng trên tài liệu khác.

var mongooseRefValidator = require('lackey-mongoose-ref-validator'); 
mongoSchema.plugin(mongooseRefValidator, { 
    onDeleteRestrict: ['tags'] 
}); 

Đây là phiên bản đầu tiên, do đó một số lỗi được mong đợi. Chỉ cần điền vào một vé nếu bạn tìm thấy bất kỳ.

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