2011-10-09 27 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,但我认为命令被保留。