2011-10-09 82 views
1

標題主要描述了這個問題。我假設它是作爲一個數組來維護的,但如果哈希它不會。我只是不確定它使用了哪個。是否在MongoDB中維護嵌入對象的順序?

另外,我應該提到我使用mongoid(Ruby的ORM包裝),以防萬一這會改變事情。

+0

你能告訴我們它是如何存儲在mongo中嗎? –

回答

2

要回答你的基本問題是沒有

實際上,有一個關於keys in JIRA重新排序的錯誤。嵌入對象只是存儲在另一個值中的鍵/值的對象。所以在數據庫中的排序絕對不能保證。

從BSON的角度來看,訂購應該沒有關係。 {x:1,y:2}{y:2,x:1}相同。

從驅動程序的角度來看,這兩個符號應該返回相同的對象。

但是,如果您使用嵌入文檔的數組,則數組應該保持其順序。

因此,你不能依賴任何對象的鍵排序(嵌入或不),但數組對象的排序應該工作。

+1

我已確認這是正確的。有趣的一點是,儘管嵌入式文檔從Mongoid的數組中出來,順序並沒有被保存。所以它可能在內部存儲爲散列,並且僅在ruby中以數組的形式出現。 –

0

從Mongoid Docs:1到許多嵌入式關係存儲爲散列數組。

http://mongoid.org/docs/relations/embedded/1-n.html

因此,這意味着你可以使用像parent.embeddedobject.first一個調用來獲取數組中第一個嵌入的對象。您還可以使用數組附加符號(person.addresses < < Address.new)添加新的嵌入對象。

我也使用mongoid,我發現這個railscast是非常有用的。如果你還沒有,請檢查一下。

http://railscasts.com/episodes/238-mongoid

TL:DR;我是一個noob,但我認爲命令被保留。