2017-01-03 3 views
0

Я хочу создать структуру документов mongodb, как показано ниже.Добавление элемента в вспомогательный массив массива в MongoDB

data:[[{a:b},{b:c}],[{e:f}],[{f:g},{j:h},{i:l}]] 

Эта структура позволит мне добавить новый вспомогательный элемент массива, 4-й один к существующему массиву данных, который содержит три вложенных массивов в приведенном выше примере, если это необходимо.

Я могу добавить новый элемент вспомогательного массива, используя следующую команду из оболочки mongodb.

db.xyz.update({'id':'A01'},{$push:{data:[]}},{}) 

Однако, я не могу найти решение для ввода данных в соответствующие массивы. Следующая команда не работает.

db.xyz.update({'id':'A01'},{$push:{data[0]:{$push:{a:b}}}},{}) 

ответ

0

Должно быть достаточно одного доллара. Попробуйте вместо этого:

db.xyz.update({'id':'A01'}, {$push: {"data.0": {a: "b"}}}) 

результат:

{ 
    "_id":ObjectId("586b907a4979a26deaacf4ad"), 
    "data":[ 
     [ 
     { 
      "a":"b" 
     }, 
     { 
      "b":"c" 
     }, 
     { 
      "a":"b" 
     } 
     ], 
     [ 
     { 
      "e":"f" 
     } 
     ], 
     [ 
     { 
      "f":"g" 
     }, 
     { 
      "j":"h" 
     }, 
     { 
      "i":"l" 
     } 
     ] 
    ] 
} 
+0

И для получения первого элемента первого массива в данных я пытаюсь db.xyz.find ({ 'ID': 'А01'}, { data.0: {$ slice: 1}}), но не удалось его получить. Я получаю все элементы массива первого массива при попытке db.xyz.find ({id: 'A01'}, {data: {$ slice: 1}}), как получить первый элемент первого массива. –

+0

@SatyaNarayana вы можете сделать это вот так: db.xyz.aggregate ([{$ match: {_id: "A01"}}, {$ project: {data: {$ arrayElemAt: [{$ arrayElemAt: ["$ data ", 0]}, 0]}}}]) – felix

+0

Большое спасибо. –

Смежные вопросы