4

假设我在 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 文档中,我看到了如何将元素添加到数组的末尾以及如何更新现有元素的值,但没有看到如何插入到数组的中间(à la PHP 的array_splice)。这是否只能通过将整个数组重新分配给一个新数组并在中间插入所需元素来实现?

4

3 回答 3

3

MongoDB 现在支持此功能。您可以使用$position运算符将元素插入到数组的中间。

祝你好运

于 2014-10-09T15:43:57.957 回答
1

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

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

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

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

于 2013-05-06T15:36:23.923 回答
0

您不应该将层号存储为数组元素的属性吗?BSON 规范中说数组是键值对,所以你需要使用你的层号作为数组中的键。(MongoDB 使用 BSON 来存储数据)

于 2013-02-07T18:21:02.600 回答