2014-04-14 1 views
1

В MongoDB 2.6 мы можем использовать $position (http://docs.mongodb.org/master/reference/operator/update/position/) модификатор указывает местоположение в массиве во время обновления массива в документе. Но я хотел бы вставить в массив в подкаталог .Нажмите элемент в любом положении массива в поддокументе

Схема документа:

{ 
    subdoc: { 
    array: ['0', '1', '2', '5', '6'] 
    } 
} 

Следующая обновление толкает элементы в конце array ..

db.collection.update(
    { _id: tsId }, 
    {$push: { 'subdoc.array': { $each:['3', '4'], $position:3 } }}); 

Таким образом, результат

{ 
    subdoc: { 
    array: ['0', '1', '2', '5', '6', '3', '4'] 
    } 
} 

Но я ожидаю

{ 
    subdoc: { 
    array: ['0', '1', '2', '3', '4', '5', '6'] 
    } 
} 

Возможно ли это в MongoDB 2.6?

+1

Хороший пример использования нового оператора –

ответ

3

Это справедливое предложение в вашем вопросе, однако у вас в основном есть неправильная концепция.

Первый из которых является то, что вы пропустили понятие, что массивы в целом имеют свои записи, начиная с индексом 0 для первого элемента, так что ваше «позиционирование» выходит на один блок в этом случае и должны были:

db.collection.update(
    { _id: tsId }, 
    {$push: { 'subdoc.array': { "$each":["3", "4"], "$position": 3 } }} 
) 

И поскольку вы сейчас вставляете в правильное положение, ваши элементы находятся в правильном месте.