Да приемем, че имаме:
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 } }
Този подход трябва да е по-прост от страна на драйвера, но ще трябва да съхранявате повече информация в база данни.
Изберете каквото ви харесва повече.