2016-04-06 242 views
6

我有一個文件,字段爲_id,類型爲ObjectId,字段爲created_at的類型爲DateMongodb按日期排序

_id當然會增加,並且created_at的值是current_date應該會增加。

所以我的問題是:

  1. 是否有任何機會,2個文件,A和B,A._id > B._id,但A.created_at < B.created_at
  2. 如何保持created_at儘可能精確,因此created_at的順序對應於_id
+0

唯一的 「真正的」 機會會'_id'生成的地方在當前「時間」位於服務器實例後面的源中,而「created_at」屬性來自['$ currentDate'](https://docs.mongodb.org/manual/reference/operator/update/ currentDate /),而不是遠程。儘管「盡最大努力」,「created_at」實際上可以被「改變」,而「_id」字段是「不可變的」,並且**不能被改變。因此'_id'中的'ObjectId'永遠不會改變它的初始值,但其他屬性沒有這種區別。 –

+0

https://docs.mongodb.org/manual/reference/method/ObjectId/ 在上面的鏈接,你可以看到,mongodb使用時間戳來創建它的ID ..所以我認爲這不可能是一個情景,當這可能會發生,除非你改變系統時間在你的服務器運行.. –

+0

@AnirudhModi好吧「技術上」可能會有上述情況。另一件需要考慮的事情是,ObjectId中的「時間」不是精確到毫秒,而是任何BSON「日期」。因此,多個ObjectId值實際上可以代表「同一時間」(儘管仍然是獨立單調的),在包含完整的Date對象的字段中,這是「不太可能」,或者是一個「更精確的數字版本」 「時間測量。取決於使用情況,通常是一個相當廣泛的主題。 –

回答

11

你可以在文檔集合中的Rails使用ORDER_BY像

Product.order_by("created_at desc") 

MongoDB中 例如

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

我使用'_id'對文檔進行排序,它是主鍵,速度非常快。 – xcaptain

+0

@xcaptain你知道你可以索引任何領域甚至多個領域,他們也會非常快。 – Hughzi

+0

@xcaptain你可以通過_id'created_at'用'_id'和_id默認索引 – Sukanta