2016-04-06 4 views
6

Ho un documento con un campo _id ha tipo ObjectId e un campo created_at ha tipo Date.Mongodb ordinamento per data

_id è ovviamente in aumento e il valore di created_at è la data corrente dovrebbe essere in aumento.

Quindi la mia domanda è: c'è

  1. qualche possibilità che 2 documenti, A e B, A._id > B._id, ma A.created_at < B.created_at.
  2. Come mantenere created_at il più preciso possibile, quindi l'ordine di created_at corrisponde a _id.
+0

L'unica possibilità "reale" sarebbe dove è stato generato '_id' a un'origine in cui il "tempo" corrente era dietro l'istanza del server e la proprietà "" create_at' "proveniva da [' $ currentDate'] (https://docs.mongodb.org/manual/reference/operator/update/ currentDate /) sul server stesso, piuttosto che in remoto. Inoltre, nonostante i "migliori sforzi", il '' created_at "' potrebbe infatti essere "cambiato", mentre il campo '_id' è" immutabile "e ** non può ** essere modificato. Quindi un 'ObjectId' in' _id' non può mai cambiare dal suo valore iniziale, ma qualsiasi altra proprietà non ha tale distinzione. –

+0

https://docs.mongodb.org/manual/reference/method/ObjectId/ Nel link sopra puoi vedere che mongodb usa il timestamp per creare il suo ID..Perché non ci può essere uno scenario quando questo potrebbe verificarsi, a meno che non si cambi l'ora di sistema in cui il server è in esecuzione .. –

+0

@AnirudhModi Bene "tecnicamente" ci possono essere casi come menzionato. L'altra cosa da considerare è che il "tempo" in un 'ObjectId' è ** non ** accurato al millisecondo, dove sarà la data di ogni BSON. Quindi più valori di 'ObjectId' possono rappresentare lo" stesso tempo "(anche se sono ancora monotoni indipendentemente), dove questo è" meno probabile "in un campo contenente un oggetto' Date' completo, o una versione numerica di un "più preciso" "misurazione del tempo. Dipende dall'uso e generalmente da un argomento ragionevolmente ampio. –

risposta

11

si può usare order_by sulla raccolta dei documenti come

in Rails

Product.order_by("created_at desc") 

in MongoDB ad esempio

db.products.find().sort({"created_at": 1}) --- 1 for asc and -1 for desc 
+0

Io uso '_id' per ordinare i documenti, è la chiave primaria e sarà molto veloce. – xcaptain

+0

@xcaptain sei consapevole che puoi indicizzare qualsiasi campo o anche più campi e anch'essi saranno molto veloci. – Hughzi

+0

@xcaptain che puoi fare _id con 'created_at' con '_id' e _id per default indicizzati – Sukanta