嵌入对象的顺序是否在MongoDB中维护?

时间:2011-10-09 04:33:06

标签: mongodb mongoid

标题基本上描述了这个问题。我假设如果它作为一个数组出来,它将被维护,但如果一个哈希它不会。我只是不确定它在使用它。

另外,我应该提一下我正在使用mongoid(Ruby的ORM包装器),以防万一这会改变。

2 个答案:

答案 0 :(得分:2)

回答您的基本问题是

事实上,有一个关于重新排序keys in JIRA的错误。嵌入对象只是存储在另一个值中的键/值的对象。因此,DB中无法保证顺序。

从BSON的角度来看,订购无关紧要。 {x:1,y:2}{y:2,x:1}相同。

从驱动程序的角度来看,这两种符号都应该返回相同的对象。

但是,如果您使用的是 嵌入式文档数组,那么该数组应该保持其顺序。

所以你不能依赖任何对象(嵌入或不嵌入)的键排序,但是数组对象的排序应该工作。

答案 1 :(得分: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;我是一个菜鸟,但我认为订单是保留的。