标题主要描述了这个问题。我假设它是作为一个数组来维护的,但如果哈希它不会。我只是不确定它使用了哪个。是否在MongoDB中维护嵌入对象的顺序?
另外,我应该提到我使用mongoid(Ruby的ORM包装),以防万一这会改变事情。
标题主要描述了这个问题。我假设它是作为一个数组来维护的,但如果哈希它不会。我只是不确定它使用了哪个。是否在MongoDB中维护嵌入对象的顺序?
另外,我应该提到我使用mongoid(Ruby的ORM包装),以防万一这会改变事情。
要回答你的基本问题是没有。
实际上,有一个关于keys in JIRA重新排序的错误。嵌入对象只是存储在另一个值中的键/值的对象。所以在数据库中的排序绝对不能保证。
从BSON的角度来看,订购应该没有关系。 {x:1,y:2}
与{y:2,x:1}
相同。
从驱动程序的角度来看,这两个符号应该返回相同的对象。
但是,如果您使用嵌入文档的数组,则数组应该保持其顺序。
因此,你不能依赖任何对象的键排序(嵌入或不),但数组对象的排序应该工作。
我已确认这是正确的。有趣的一点是,尽管嵌入式文档从Mongoid的数组中出来,顺序并没有被保存。所以它可能在内部存储为散列,并且仅在ruby中以数组的形式出现。 –
从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,但我认为命令被保留。
你能告诉我们它是如何存储在mongo中吗? –