2013-03-17 72 views
1

基本問題。 mongodb find命令是否總是按照添加到集合中的順序返回文檔?如果沒有如何以正確的順序執行選擇文檔? 排序?但是,如果同時添加的文檔和創建日期相同的文檔相同,但仍然有訂單。Mongodb商店和選擇順序

+1

是否http://stackoverflow.com/questions/11599069/what-does-mongo-sort-on-when-no-sort-order-is-specified/11599283答案你的問題? – WiredPrairie 2013-03-17 23:03:51

回答

2

嗯,是的,並不完全。 文檔默認按自然順序排序。這最初是文檔存儲在磁盤上的順序,這實際上是將文檔添加到集合中的順序。 但是,這個順序並不是確定性的,因爲一旦這些文檔在更新操作之後增長,文檔就可能在磁盤上移動,並且不能再適合當前空間。這樣,初始(插入)順序可能會改變。

只要_id是ObjectId類型,保證插入順序排序的方法是排序{_id:1}。這將返回按升序排序的文檔。

寫入操作不會同時發生。寫入鎖定在數據庫級別(V 2.4及以上)。 _id的前四個字節是插入時間戳,最後3位是隨機計數器,用於區分具有相同時間戳的ObjectId實例(並對其進行排序)。

_id字段默認索引

+0

如果我按{_id:1}排序,引擎是否會應用一些內部邏輯以正確的順序排序文檔? – WHITECOLOR 2013-03-17 23:13:15

+0

是的,按ID排序意味着插入順序 – 2013-03-17 23:16:45

+0

只要'id'表示'_id'字段 – 2013-03-17 23:53:04