2014-09-19 13 views
5

Tôi đã quyết định di chuyển cơ sở dữ liệu của mình từ MySQL sang Mongo vì phần lớn thời gian, dữ liệu của tôi không được cấu trúc. Và nó cho phép tôi những khả năng quá phức tạp trong một câu lệnh SQL truyền thống.Làm thế nào để truy vấn các quan hệ trong NoSQL?

Có một vấn đề mà tôi hiện đang phải đối mặt và cách tiếp cận một mô hình quan hệ truyền thống của SQL trong NoSQL. Tôi đã đọc nhiều lần rằng NoSQL không được thiết kế để đối phó với các mối quan hệ. Tôi có cần thêm chúng dưới dạng mảng vào tài liệu có quan hệ không?

Đây là một tình huống khiến tôi bị kẹt. Trong SQL, tôi đã có một bảng riêng biệt cho các mã thông báo truy cập oauth có user_id, client_id, access_token, hết hạn như các thuộc tính của nó. Đó là mối quan hệ 1-N giữa người dùng và access_token. Làm thế nào tôi sẽ làm điều đó trong NoSQL? Bằng cách thêm một mảng mảng oauth_tokens? Nếu tôi làm điều đó, làm cách nào để tìm kiếm mã thông báo trong mảng? Làm thế nào để truy vấn

search for a document where the _id is $user_id and there is an element 
with $token in the access_tokens array? 
+0

Bạn có thể sử dụng khái niệm map-reduce trong mongodb để tạo mối quan hệ với hai bộ sưu tập khác nhau. –

+0

@KumarKailash Có khả năng bạn không thể. MongoDB hoạt động trên ** một ** bộ sưu tập tại một thời điểm, và nó "cố tình" làm điều này vì một lý do. Câu hỏi này cần cung cấp một vấn đề cụ thể về điểm và ví dụ để giải quyết hoặc về cơ bản là "quá rộng". Vì vậy, nếu tác giả muốn có một câu trả lời thực sự, thì nó được đề xuất để mô tả thực sự vấn đề đó hơn là yêu cầu các khái quát hóa. –

+0

Trước khi tôi hỏi câu hỏi này, tôi đã gần như không có kiến ​​thức về "quan hệ" trong mongo; sau khi googling và cố gắng và thử nghiệm tôi có một chút kiến ​​thức. Xin lỗi vì điều đó. Tôi có những gì tôi cần cho bây giờ nhưng tôi khá chắc chắn tôi sẽ hỏi một câu hỏi tương tự ở đây trong tương lai gần nhất và tại thời điểm đó tôi sẽ rất cụ thể. – Gasim

Trả lời

2

Bạn có ít nhất 2 lựa chọn ở đây:

  1. Bạn có thể lưu trữ oauth_tokens trong bộ sưu tập riêng biệt (giống như bạn đã có trong MySQL trong bảng khác), và thêm vào oauth_token lĩnh vực như user_id chứa giá trị _id cho người dùng hiện tại này từ bộ sưu tập của người dùng. Tìm mã thông báo cho người dùng được chỉ định chỉ tìm kiếm trong bộ sưu tập oauth_tokens cho các tài liệu có user_id đã cho. Hãy nhớ rằng kiểu quan hệ này không được "hỗ trợ" theo bất kỳ cách nào bởi Mongo - cơ sở dữ liệu sẽ không giúp bạn giữ giá trị của trường user_id đúng.

Ví dụ:

db.tokens.insert({ client_id : "1", user_id : "20", access_token : "1234567890", expires : new Date(2014-12-31)}) 

truy vấn:

db.tokens.find({user_id:"20"}) 
  1. Cũng giống như bạn đã viết: bạn có thể nhúng thẻ trong tài liệu sử dụng và truy vấn cho thẻ hiện có . Kiểm tra tài liệu để xem cách bạn có thể truy vấn tài liệu được nhúng: link
+0

Có lẽ chứng minh một số cách để làm một trong hai cách tiếp cận chứ không phải là đoạn văn bản và những gì nếu không số tiền chỉ một liên kết, có lẽ? –

+0

Xin lỗi vì đã nâng cao chủ đề cũ. Vì thế. Nếu tôi muốn tìm người dùng với mã thông báo nhất định, tôi có thể làm điều này 'db.tokens.find ({access_token: "1234567890"}) '? – Kurotsuki

+0

@Kurotsuki Vâng, đây là truy vấn để sử dụng. –

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