sql >> Databáze >  >> NoSQL >> MongoDB

Mongodb našel objednávku na vrácení dokumentů

Dokumenty jsou uloženy v přirozeném pořadí

Dokumenty jsou uloženy v sestupném pořadí podle data. Takže sbírka má jako první dokument 20140731.

Pokud nepoužíváte omezenou kolekci, neexistuje žádná záruka na uspořádání dokumentů na disku (také označované jako přirozený řád).

Mazání a přesuny dokumentů (když dokument přeroste svůj přidělený záznamový prostor) vytvoří místo na volném seznamu, který bude znovu použit.

Zde je rychlý příklad, který by to měl demonstrovat v mongo shell:

// 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()

Pořadí výsledků

Když použiji příkaz find s filtry {$gte :20140720, $lte :20140731}, mongodb vrátí dotaz ve vzestupném pořadí podle pole "datum".

Pokud je pro dotaz použit index, jsou dokumenty vráceny v pořadí, v jakém se nacházejí v indexu. Toho byste měli využít při sestavování svých indexů pro běžné dotazy (viz:Použití indexů k řazení výsledků dotazů).

Pro informaci, jednoduchý index (např. na {date:1} ) lze použít k vrácení výsledků seřazených ve vzestupném nebo sestupném pořadí.

Řadit podle ObjectID

Pokud používáte výchozí ObjectID MongoDB pro _id , můžete třídit podle { _id: 1 } k přibližnému pořadí vložení od prvních 4 bajtů ObjectID začlenit časové razítko. Pokud byste to chtěli použít pro řazení dotazu podle date a přibližné pořadí vložení byste zajistili index na {date:1, _id:1} .

Všimněte si, že ObjectID s jsou obvykle generovány klientským ovladačem, takže pokud máte na aplikačních serverech časový posun (nebo _id se vytvoří nějakou dobu před vložením dokumentu) ObjectID s nemusí striktně odrážet "pořadí vložení" tak, jak je vidí server. Pokud je přesnost objednávky velmi důležitá, je obecně možné vygenerovat _id na straně serveru (přístup se liší v závislosti na ovladači).




  1. Řetězce Redis vs Redis hashe reprezentující JSON:účinnost?

  2. nelze se připojit k serveru 127.0.0.1 shell/mongo.js

  3. Oprava „zeměpisná délka/šířka je mimo hranice“ v MongoDB při vytváření indexu 2dsphere

  4. Nelze skenovat pomocí šablony redis