Nazywa się to porządkiem naturalnym :
natural order
Kolejność, w jakiej baza odwołuje się do dokumentów na dysku. To jest domyślny porządek sortowania. Zobacz $natural
i Return in Natural Order
.
Potwierdza to, że ogólnie otrzymujesz je w tej samej kolejności, w jakiej je wstawiłeś, ale nie jest to gwarantowane – jak zauważyłeś.
Zwrot w naturalnym porządku
$natural
parametr zwraca pozycje zgodnie z ich naturalną kolejnością w bazie danych. Ta kolejność jest wewnętrzną funkcją implementacji i nie należy polegać na żadnej konkretnej strukturze w jej obrębie.
Użycie indeksu
Zapytania zawierające sortowanie według $natural
zamówienie nie użyj indeksów, aby wypełnić predykat zapytania, z następującym wyjątkiem:Jeśli predykat zapytania jest warunkiem równości w _id
pole { _id: <value> }
, a następnie zapytanie z sortowaniem według $natural
zamówienie może używać _id
indeks.
MMAPv1
Zazwyczaj kolejność naturalna odzwierciedla kolejność wstawiania z następującym wyjątkiem dla aparatu magazynu MMAPv1. W przypadku silnika pamięci masowej MMAPv1 kolejność naturalna nie odzwierciedla kolejności wstawiania, jeśli dokumenty przenoszą się z powodu rozrostu dokumentów lub operacje usuwania zwalniają miejsce, które jest następnie zajmowane przez nowo wstawiane dokumenty.
Oczywiście, tak jak we wspomnianych dokumentach, nie polegać na tej domyślnej kolejności (Ta kolejność jest wewnętrzną funkcją implementacji i nie należy polegać na żadnej określonej w niej strukturze). ).
Jeśli chcesz posortować rzeczy, skorzystaj z rozwiązań sortowania.
Zasadniczo, następujące dwa wywołania powinny zwrócić dokumenty w tej samej kolejności (ponieważ domyślna kolejność to $natural
):
db.mycollection.find().sort({ "$natural": 1 })
db.mycollection.find()
Jeśli chcesz posortować według innego pola (np. name
) możesz to zrobić:
db.mycollection.find().sort({ "name": 1 })