假设我在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的array_splice).这只能通过将整个数组重新分配到一个新数组并将所需元素插入中间来实现吗?
解决方法:
基本上,如果您使用update,则无法保证订单.要添加到尝试建议的问题,虽然可以在specific position更新元素,但不能使用类似的规范调用$addToSet
或$push
.
您想要的相关功能请求在这里:
https://jira.mongodb.org/browse/SERVER-2363
但就目前而言,正如您所怀疑的那样,如果不拔出阵列,按照您的意愿操纵它并使用$set
,就无法做到.