2016-03-13 38 views
12

Używam Spring Data's Querydsl integration do wykonywania moich zapytań za pomocą predykatów.Wiosenne dane Mongodb: Jak zrzucić surowe zapytania/polecenia generowane przez QueryDsl?

findAll(predicate, pageable) 

Czy istnieje sposób zrzutu rzeczywistych zapytań/poleceń, które zostaną wykonane?

Mam również spojrzał na odpowiedź na to pytanie i to nie działa dla mnie .. Configure logging for the MongoDB Java driver

--Update-- udało mi się dostać pracę rejestrowanie dodając logging.level .org.mongodb.driver = DEBUG w application.properties (nie log4j.properties)

ale nadal nie widzę kwerendy surowego że to jest wykonywane:

2016-03-23 ​​21:50 : 56 Zapytanie DEBUG: 56 - Zapytanie zakończone 2016-03-23 21:50:56 zapytanie DEBUG: 56 - Wysyłanie kwerendy przestrzeni nazw testdb.reservation na połączenie [connectionId {localValue: 4, serverValue: 42631}] na serwer ds046785.mongolab.com:39186

+0

Po stronie MongoDB możesz użyć [profiler] (https://docs.mongodb.org/manual/administration/analyzing-mongodb-performance/#database-profiling) z poziomem profilowania ustawionym na '2' na zaloguj wszystkie zapytania i polecenia, które otrzymuje instancja. – Nicolas

+0

W ostateczności za wysyłanie zapytań odpowiada sterownik mongo java, dlatego nadal można ustawić poziom dziennika 'org.mongodb' na wartość' DEBUG' i wyświetlić wydane zapytania. –

+0

Dodałem tę linię do pliku log4j.properties: log4j. logger.org.mongodb.driver = DEBUG ale wciąż nic nie jest rejestrowane – user1955934

Odpowiedz

4

Włącz profilera, ustawiając wartość profil za pomocą następującego polecenia w powłoce Mongo:

db.setProfilingLevel(2) 

wyjście profilera mogą być przeglądane za pomocą tego polecenia:

db.system.profile.find({ millis : { $gt : 100 } }) 
wyświetlacze

To polecenie Wszystkie operacje dłużej niż 100 milisekund

+0

Uruchomiłem polecenie db.setProfilingLevel (2), a następnie uruchomię moje zapytanie względem bazy danych, ale plik db.system.profile.find ({millis: {$ gt: 0}}) nie zwróci zapytania dla – user1955934

+0

Tak, to samo, najlepiej będzie wyczyścić profil i uruchomić sam program "db.system.profile.find()". Możesz wyczyścić profil w następujący sposób: 'db.setProfilingLevel (0); db.system.profile.drop(); db.setProfilingLevel (2); ' – megalucio