【问题标题】:Is it possible to insert an element into the middle of an array in a MongoDB document?是否可以在 MongoDB 文档的数组中间插入一个元素?
【发布时间】:2013-01-23 07:50:54
【问题描述】:

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

【问题讨论】:

    标签: javascript arrays mongodb splice


    【解决方案1】:

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

    【讨论】:

    • 虽然 MongoDB 以 BSON 格式存储其数据,但它肯定不会让您在插入/更新之前对其进行预 BSONize 并且它保留数组元素的顺序。答案可能是“不,mongodb 不能那样做”,但我认为我的问题仍然有效。
    【解决方案2】:

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

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

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

    但现在,正如您所怀疑的那样,如果不拉出数组、根据需要对其进行操作并使用 $set,您将无法做到这一点。

    【讨论】:

      【解决方案3】:

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

      祝你好运

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-16
        • 2022-11-13
        • 1970-01-01
        • 2021-10-25
        • 1970-01-01
        相关资源
        最近更新 更多