Давайте рассмотрим, что у нас есть:
1 2 3
4 5 6
7 8 9
Вы можете хранить матрицу как встроенный массив в mongodb различными способами:
1. Представьте матрицу в виде одномерного массива и сохраните в таком виде:
{
_id: "1",
matrix: [1,2,3,4,5,6,7,8,9],
width: 3, // or store just size in case of NxN
height: 3,
}
Затем для увеличения третьего элемента матрицы вам понадобится следующее обновление:
db.matrix.update({_id: 1}, { $inc : { "matrix.2" : 1 } }
Этот подход очень легок, поскольку вы сохраняете как можно меньше данных, но вам всегда нужно вычислять позицию элемента для обновления, и вам потребуется написать дополнительный код для десериализации матрицы в вашем драйвере.
2.Сохранить матрицу следующим образом:
{
_id: "1",
matrix: [
{xy: "0-0", v: 1},
{xy: "1-0", v: 2},
{xy: "2-0", v: 3},
{xy: "0-1", v: 4},
...
]
}
Затем для увеличения третьего элемента первой строки в матрице вам потребуется следующее обновление:
db.matrix.update({_id: 1, "matrix.xy": 2-0 }, { $inc : { "matrix.$.v" : 1 } }
Этот подход должен быть проще со стороны водителя, но вам нужно будет хранить больше информации в базе данных.
Выбирай, что тебе больше нравится.