2013-02-07 96 views
4

说我有一个蒙戈DB,看起来像这样的文件:是否可以在MongoDB文档的数组中插入元素?

{ 
    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)。这是唯一可能的重新分配整个数组到一个新的数组与中间插入所需的元素?

回答

0

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

+0

虽然MongoDB中存储其在BSON格式的数据,它肯定不会让你插入/更新*前预BSONize它和*它保留了数组元素的顺序。答案可能是“不,MongoB不能这样做”,但我认为我的问题仍然有效。 – brnt

1

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

好运

相关问题