是否可以将元素插入 MongoDB 文档中的数组中间?

brn*_*rnt 5 javascript arrays splice mongodb

假设我在 mongo DB 中有一个文档,如下所示:

\n\n
{\n    pages: [\n        {\n            elements: [\n                {id:1},\n                {id:2},\n                {id:3}\n            ]\n        },\n        {\n            elements: [\n                ...\n            ]\n        }\n    ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

并且页面内元素的顺序具有语义意义(例如,堆叠)。现在假设我想在第一页中的第二个元素之前添加一个新元素。生成的文档的期望状态是这样的:

\n\n
{\n    pages: [\n        {\n            elements: [\n                {id:1},\n                {id:4}, // <------ element inserted here\n                {id:2},\n                {id:3}\n            ]\n        },\n        {\n            elements: [\n                ...\n            ]\n        }\n    ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

Mongo 文档中,我看到了如何将元素添加到数组的末尾以及如何更新现有元素的值,但没有看到如何插入到数组的中间(\xc3\xa0 la PHP\'s array_splice) 。这是否只能通过将整个数组重新分配给一个新数组并在中间插入所需的元素来实现?

\n

Ada*_*ord 1

本质上,如果您使用update,则不能保证顺序。要添加尝试您建议的问题,虽然您可以更新特定位置的元素,但您不能使用类似的规范调用$addToSetor 。$push

您想要的相关功能请求在这里:

https://jira.mongodb.org/browse/SERVER-2363

但现在,正如您所怀疑的,如果不拉出数组、根据需要操作它并使用$set.