Đã từng có một phần trong sách hướng dẫn nói rõ ràng rằng DBRef không được hỗ trợ trong khuôn khổ tổng hợp, cùng với nhiều loại BSON khác.
Đoạn văn cũ được đọc như được hiển thị trong kho lưu trữ nhóm google này tin nhắn:
Nó có thể vẫn ở đó ở đâu đó nhưng tôi dường như không thể tìm thấy nó ngay bây giờ :)
Cũng như được đề cập trong chuỗi thông báo đó là ngoài việc điều này không được hỗ trợ trong khung tổng hợp, thì tùy chọn khác của bạn (và chỉ tùy chọn thực sự để tổng hợp) là sử dụng mapReduce thay vào đó. Như một ví dụ về shell:
db.Products.mapReduce(
function() {
emit( this.model.$id, { "actives": [this.isActive] } );
},
function(key,values) {
var result = { "actives": [] };
values.forEach(function(value) {
value.actives.forEach(function(active) {
result.actives.push( active );
});
});
},
{ "out": { "inline": 1 } }
)
Nó trông không đẹp vì { "_id": "", "value": { } }
tùy ý cấu trúc của bản đồ Giảm kết quả, nhưng nó cho phép loại tổng hợp bạn đang tìm kiếm.
Cũng có tham chiếu đến Sự cố JIRA này: SERVER-14466 , nhưng tôi sẽ không cố gắng di chuyển nhiều trên mặt trận đó.
Vì vậy, bạn có thể sử dụng mapReduce nhưng nên tránh sử dụng DBRef và xác định một dạng thay thế của "tham chiếu thủ công" hoặc nhúng thông tin "bộ sưu tập" và "cơ sở dữ liệu" hoặc dựa vào định nghĩa bên ngoài của những thứ như vậy trong lược đồ ứng dụng của bạn, tùy thuộc vào theo nhu cầu của bạn. Miễn là bạn tuân theo các quy tắc tương tự ở đó thì bạn có thể sử dụng khung tổng hợp cho bất kỳ thứ gì có tên thuộc tính hợp lệ.