MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Kolejność dokumentów zwrotnych Mongodb find

Dokumenty są przechowywane w naturalnej kolejności

Dokumenty są przechowywane w porządku malejącym według daty. Tak więc kolekcja ma 20140731 jako pierwszy dokument.

O ile nie korzystasz z kolekcji ograniczonej, nie ma gwarancji na uporządkowanie dokumentów na dysku (określane również jako porządek naturalny).

Usunięcie i przeniesienie dokumentu (gdy dokument przekroczy przydzieloną mu przestrzeń do zapisu) tworzy miejsce na wolnej liście, które zostanie ponownie wykorzystane.

Oto krótki przykład, który powinien to zademonstrować w mongo powłoka:

// Start with an empty database & collection
use demodb; db.dropDatabase(); db.order.drop()

// Add some test data
for (i=0; i<1000; i++) {
    db.order.insert({'i': i})
}

// Looks like insertion order! (0..9)
db.order.find({}).limit(10);

// Pause 5s for effect :)
sleep(5000);

// Remove half the entries
db.order.remove({ i: { $lt: 500 }})

// Re-add the missing entries
for (i=0; i<500; i++) {
    db.order.insert({'i': i})
}

// Not the entries you expected .. space from deleted records was reused
db.order.find({}).limit(10)

// Clean up demodb
db.dropDatabase()

Kolejność wyników

Kiedy używam polecenia find z filtrami {$gte :20140720, $lte :20140731}, mongodb zwraca zapytanie w kolejności rosnącej pola „data”.

Jeśli w zapytaniu używany jest indeks, dokumenty są zwracane w kolejności, w jakiej zostały znalezione w indeksie. Powinieneś skorzystać z tego podczas konstruowania indeksów dla typowych zapytań (patrz:Użyj indeksów do sortowania wyników zapytań).

FYI, prosty indeks (np. {date:1} ) może służyć do zwracania wyników posortowanych w kolejności rosnącej lub malejącej.

Sortuj według identyfikatora obiektu

Jeśli używasz domyślnych identyfikatorów ObjectID MongoDB dla _id , możesz sortować według { _id: 1 } aby przybliżyć kolejność reklamową od pierwszych 4 bajtów ObjectID zawierać znacznik czasu. Jeśli chcesz użyć tego do sortowania zapytania na podstawie date i przybliżoną kolejność reklamową zapewnisz indeks w dniu {date:1, _id:1} .

Zwróć uwagę, że ObjectID s są zwykle generowane przez sterownik klienta, więc jeśli masz przesunięcie zegara na serwerach aplikacji (lub _id jest tworzony jakiś czas przed wstawieniem dokumentu) ObjectID s mogą nie odzwierciedlać ściśle „kolejności wstawiania” widzianej przez serwer. Jeśli dokładność zamówienia reklamowego jest bardzo ważna, zazwyczaj można wygenerować _id po stronie serwera (podejście różni się w zależności od sterownika).




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. $arrayElemAt . MongoDB

  2. mongodb nie mógł połączyć się z serwerem

  3. Unikalny indeks Mongoose na poddokumencie

  4. jak przekazać zmienną do wyrażenia regularnego?

  5. Usuwanie pliku database.yml podczas używania Mongoid w Rails 3.2