Hiện tại, chỉ ObjectId
các giá trị tham chiếu đến _id
của một bộ sưu tập khác có thể được sử dụng làm refs
.
Đây là một cuộc thảo luận https://github.com/Automattic/mongoose/issues/2562
Tuy nhiên, nó có thể là một cải tiến trong tương lai.
Trên thực tế, không cần thêm default
giá trị để populate
, chỉ cần xác định fooAccessType
như bên dưới
fooAccessType: {
type: String,
ref: 'AccessType'
},
Đối với population
FacilityPersonnel.findOne({_id:req.params.id})
.populate('fooAccessType')
.exec(
ObjectID
được sử dụng trong population
và ObjectId
là loại BSON 12 byte, được xây dựng bằng:
Vì vậy, SuperAdmin
không đúng ObjectID
. Bạn có thể sử dụng UUID
làm giá trị mặc định của ObjectID
var uuid = require('node-uuid');
// ...
fooAccessType: {
type: String,
default: uuid.v1,
ref: 'AccessType'
},
Tuy nhiên, đoạn mã trên rất lạ, fooAccesType
là tham chiếu đến AccessType
tài liệu.
Khi cố gắng lưu trường field
tài liệu, AccessType
trước tiên nên được lưu, sau đó lấy ObjectID
từ AccessType
đã lưu này và gán nó cho fooAccessType
, cuối cùng, lưu trường field
mới tài liệu.
var access = new AccessType({});
access.save(function(err){
if (err)
// error handling
else {
facilityperson.fooAccessType = access._id;
facilityperson.save(function(err) {
});
}
});
Đối với population
FacilityPersonnel.findOne({_id:req.params.id})
.populate('fooAccessType')
.exec(