2014-09-19 14 views
5

Zdecydowałem przenieść moją bazę danych z MySQL do Mongo, ponieważ większość czasu moje dane nie są ustrukturyzowane. Pozwoliło mi to na zastosowanie zbyt skomplikowanych metod w tradycyjnym SQL.Jak zapytać o relacje w NoSQL?

Jest jeden problem, przed którym obecnie stoję i jak podejść do tradycyjnego modelu relacyjnego SQL w NoSQL. Czytałem wiele razy, że NoSQL nie jest przeznaczony do radzenia sobie z relacjami. Czy muszę dodać je jako tablicę do dokumentu z relacją?

Oto jedna z sytuacji, która utknęła. W SQL miałem osobną tabelę dla tokenów dostępu oauth, które ma id_użytkownika, id_klienta, access_token, wygasa jako jego atrybuty. Była to relacja 1-N między użytkownikiem a tokenem dostępu. Jak mam to zrobić w NoSQL? Dodając pole tablicy oauth_tokens? Jeśli to zrobię, jak wyszukać token w tablicy? Jak mogę kwerendy

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

Możesz użyć koncepcji map-reduce w mongodb, aby utworzyć relację z dwoma różnymi kolekcjami. –

+0

@KumarKailash Prawdopodobnie nie można. MongoDB działa w kolekcji ** one ** na raz i "celowo" robi to z jakiegoś powodu. To pytanie musi zawierać konkretny punkt i przykładowy problem do rozwiązania lub zasadniczo jest "zbyt szerokie". Jeśli więc autor chce prawdziwej odpowiedzi, sugeruje się opisanie tego problemu zamiast proszenia o generalizacje. –

+0

Zanim zadałem to pytanie, miałem prawie zerową znajomość "relacji" w mongo; po wyszukiwaniu i testowaniu mam trochę wiedzy. Przepraszam za to. Dostałem na razie to, czego potrzebowałem, ale jestem prawie pewien, że w najbliższej przyszłości będę zadawał podobne pytanie i będę wtedy bardzo konkretny. – Gasim

Odpowiedz

2

mieć co najmniej 2 opcje tutaj:

  1. można przechowywać oauth_tokens w selektywnej zbiórki (tak jakbyś miał w MySQL w innej tabeli) i dodać do oauth_token pole jak id_użytkownika zawierający wartość _id dla bieżącego użytkownika z kolekcji użytkowników. Znajdowanie tokenów dla określonego użytkownika to po prostu wyszukiwanie w kolekcji oauth_tokens dla dokumentów o podanym id_użytkownika. Pamiętaj, że ten rodzaj relacji nie jest w żaden sposób "wspierany" przez Mongo - baza danych nie pomoże ci w utrzymaniu prawidłowych wartości pola user_id.

Przykład:

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

zapytania:

db.tokens.find({user_id:"20"}) 
  1. Tak jak napisałeś: można osadzone znaki w dokumencie użytkownika i kwerendy dla istniejących tokenów . Sprawdź dokumenty, aby dowiedzieć się, jak możesz wyszukiwać dokumenty osadzone: link
+0

Być może udowodnisz, że masz do czynienia raczej z podejściem, a nie z prostymi akapitami, a co inaczej z linkiem? –

+0

Przepraszamy za podnoszenie starych tematów. Więc. Jeśli chcę znaleźć użytkownika z pewnym tokenem, mogę to zrobić 'db.tokens.find ({access_token:" 1234567890 "})'? – Kurotsuki

+0

@Kurotsuki Tak, to zapytanie do użycia. –

Powiązane problemy