假设我在mongo DB中有一个文档,如下所示:
{
pages: [
{
elements: [
{id:1},
{id:2},
{id:3}
]
},
{
elements: [
...
]
}
]
}
并且页面内元素的顺序具有语义含义(例如,堆叠)。现在说我想在第一页的第二个元素之前添加一个新元素。生成的文档的期望状态是:
{
pages: [
{
elements: [
{id:1},
{id:4}, // <------ element inserted here
{id:2},
{id:3}
]
},
{
elements: [
...
]
}
]
}
在Mongo docs中,我看到如何在数组的末尾添加元素以及如何更新现有元素的值,而不是如何插入数组的中间(例如PHP的{{ 3}})。这只能通过将整个数组重新分配给一个新数组并将所需元素插入中间来实现吗?
答案 0 :(得分:1)
基本上,如果您使用update,则无法保证订单。要添加到尝试建议内容的问题,虽然您可以在specific position更新元素,但无法使用类似的规范调用$addToSet
或$push
。
您想要的相关功能请求在此处:
https://jira.mongodb.org/browse/SERVER-2363
现在,正如您所怀疑的那样,如果不拔出阵列,根据需要操纵它并使用$set
,就无法做到。
答案 1 :(得分:1)
MongoDB现在支持此功能。您可以使用$position运算符将元素插入数组的中间。
祝你好运
答案 2 :(得分:0)
你不应该只是将图层编号存储为数组元素的属性吗? BSON规范说数组是键值对,所以你需要使用你的层号作为数组中的键。(MongoDB使用BSON来存储数据)