MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cách tạo các truy vấn lồng nhau trong MongoDb hoạt động giống như các truy vấn chọn Sql lồng nhau

Câu trả lời cho những câu hỏi như vậy trong MongoDB thường là không chuẩn hóa dữ liệu của bạn. Nếu bạn chỉ cần danh sách người dùng trong nhóm, bạn có thể lưu trữ Id người dùng Tên người dùng trong tài liệu nhóm. Theo một số cách, bạn cấu trúc cơ sở dữ liệu của mình theo kết quả bạn muốn thấy trên màn hình thay vì cố gắng đặt nó ở một định dạng chuẩn hóa nào đó.

Rõ ràng điều đó sẽ chỉ hoạt động nếu danh sách nhóm người dùng của bạn (có tên) có thể vừa với một tài liệu duy nhất, nhưng cách tiếp cận hiện tại của bạn có một số hạn chế liên quan đến kích thước tối đa của một nhóm.

Một cách tiếp cận khác là lưu trữ các nhóm mà người dùng thuộc về trong một mảng trên mỗi tài liệu 'Người dùng'. Thêm chỉ mục trên trường mảng đó và bây giờ bạn có thể tìm thấy người dùng theo nhóm. Do người dùng có khả năng thuộc ít nhóm hơn so với số thành viên trong nhóm, đây có thể là cách tiếp cận tốt nhất ở đây.

db.user.save({_id:"u1", name:"u1 name", groups:[{_id:"g1", name:"Group One"}, ...]});

Một lần nữa, bạn có thể lưu trữ tên nhóm với _id của nó để bạn có thể hiển thị ngay lập tức danh sách các nhóm mà người dùng thuộc về chỉ với một chuyến đi khứ hồi. Tất nhiên, nếu bạn cho phép tên nhóm thay đổi, bạn sẽ phải bắt đầu một nhiệm vụ nền để sửa tất cả các bản sao của tên này.

Tôi cũng sẽ sử dụng trình tạo id MongoDB được tích hợp sẵn chứ không phải của riêng bạn, nó có nhiều thuộc tính mong muốn.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Thời gian chạy mô hình thay đổi với mongodb / mongoid

  2. Cập nhật nhiều tài liệu trong mongoDB với các giá trị khác nhau

  3. PyMongo max_time_ms

  4. Bao gồm tất cả các trường hiện có và thêm các trường mới vào tài liệu

  5. Sử dụng một MongoClient duy nhất trên một dịch vụ web JavaEE