2012-03-23 10 views
13

Używam Mongoid ruby ​​gem do interakcji w/MongoDB i kiedy próbuję uzyskać jedną z czegoś z zapytania, dodaje $limit: -1 (tj. Negatywny), kiedy spodziewam się, że po prostu użyć 1. Próbowałem zrobić to samo w konsoli i nie zmieniło to, który dokument został zwrócony.W pytaniu MongoDB, co oznacza ograniczenie ujemne?

Czy ograniczenie ujemne oznacza coś specjalnego?

Odpowiedz

8

Istnieje notatka dotycząca ujemnych limitów w nagłówku "numberToReturn" w "OP_QUERY" section of the "Mongo Wire Protocol" documentation.

„Jeśli«granica»oferty kierowca klient funkcjonalność (jak LIMIT SQL słowa kluczowego), to jest do sterownika klienta, aby zapewnić, że nie więcej niż określoną liczbę dokumentów są zwracane do powołania .Jeśli numberToReturn ma wartość 0, db użyje domyślnego rozmiaru zwracanego . Jeśli liczba jest ujemna, baza danych zwróci ten numer i zamknie kursor.Nie można uzyskać dalszych wyników dla tego zapytania . "

Więcej informacji na temat kursorów i limitu, zobacz "Queries and Cursors" documentation, szczególnie teraz-usuniętą sekcję "Execution of queries in batches".

+0

* Jeśli liczba jest ujemna, baza danych zwróci tę liczbę i zamknie kursor * - co za brzydki hack! –

5

Znak wartości granicznej określa, czy jest to "sztywny limit" czy "miękki limit". Zapytanie "twardy limit" (znak ujemny) zamyka kursor po zwróceniu maksymalnej liczby dokumentów, jakie może. "Limit miękki" powoduje, że kursor pozostaje otwarty, w przypadku gdy odpowiedź nie mieści się w liczbie dokumentów określonych przez limit.

+2

Czy posiadasz dokumentację, aby to potwierdzić? Nie spotkałem się z tym wcześniej. –

+0

Również, który jest miękki limit - dodatni czy ujemny? – nicholaides

+0

zaktualizowałeś odpowiedź. będzie szukał odniesienia do tego. – Yasser