Cố gắng 'tạo một truy vấn "quan hệ" "trong MongoDB sẽ là một bài tập thất vọng. Lược đồ của bạn lưu trữ một số thông tin (xếp hạng của bài đăng) trong một bộ sưu tập và thông tin khác (tuổi của tác giả) trong một bộ sưu tập khác, nhưng tất cả các truy vấn MongoDB đều hoạt động trên một bộ sưu tập. Trừ khi bạn chuẩn hóa dữ liệu của mình (điều mà bạn đã nói là không muốn làm), bạn sẽ cần phương pháp hai lần để làm cho việc này hoạt động.
Một cách tiếp cận sẽ hoạt động là tạo một mảng ID tác giả và sử dụng nó trong một truy vấn của bộ sưu tập bài đăng bằng cách sử dụng '$ in'. Đây là những gì nó có thể trông giống như trong JavaScript bằng cách sử dụng mongo shell:
> var authorList = [];
> var authorCursor = db.authors.find({age:{$gt:19,$lt:25}},{"_id":1});
> while(authorCursor.hasNext()){authorList.push(authorCursor.next()["_id"])};
> db.posts.find({"author.$id":{$in:authorList},rating:{$gt:6,$lt:9}});
Dòng đầu tiên tạo ra một mảng trống. Dòng thứ hai tạo một con trỏ sẽ chọn _id
của tất cả các tác giả trong độ tuổi mục tiêu của bạn. Dòng thứ ba sử dụng con trỏ để điền một mảng tác giả _id
S. Dòng thứ tư hiển thị tất cả các bài đăng phù hợp với tiêu chí mục tiêu của bạn:tác giả _id
trong danh sách mà chúng tôi chỉ xây dựng và xếp hạng trong phạm vi bạn đã chỉ định.