MongoDb中的增量矩阵结构

MongoDb中的增量矩阵结构,mongodb,matrix,increment,Mongodb,Matrix,Increment,我想有一个矩阵结构(一个NxN整数矩阵),我想在其中增加值。在MunGDB中建立矩阵的正确方法和增加其值的方法是什么? < P>让我们考虑一下: 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:

我想有一个矩阵结构(一个NxN整数矩阵),我想在其中增加值。在MunGDB中建立矩阵的正确方法和增加其值的方法是什么?

< P>让我们考虑一下:

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 } }
db.matrix.update({_id: 1, "matrix.xy": 2-0 }, { $inc : { "matrix.$.v" : 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}, { $inc : { "matrix.2" : 1 } }
db.matrix.update({_id: 1, "matrix.xy": 2-0 }, { $inc : { "matrix.$.v" : 1 } }
从驱动程序的角度来看,这种方法应该更简单,但您需要在数据库中存储更多信息


选择您更喜欢的内容。

您可以使用矩阵索引作为字段名:

{
  _id: "1",
  matrix: {
  "0": {{"0": 0}, {"1": 0}, {"2": 0}}
  "1": {{"0": 0}, {"1": 0}, {"2": 0}},
  "2": {{"0": 0}, {"1": 0}, {"2": 0}},
  "3": {{"0": 0}, {"1": 0}, {"2": 0}},
  ...
  ]
}
这种方法的一个优点是,您不必初始化矩阵,因为
$inc
将创建字段并为其指定要增加的值

您还可以使用
upsert=true
一次更新多个字段,或者在文档不存在时创建文档

最后,更新的表示法非常清晰和简单:

db.matrix.update({_id: 1}, { $inc : { "matrix.0.0" : 1, "matrix.0.1" : 2, ...  } }

我尝试将第二个解决方案与upsert的更新结合起来,但不幸的是,正如文档所建议的,它不起作用。所以我想我可以使用一个以pairrow列为键的映射。在这种情况下,它将与upsert一起工作,我认为如果某些单元格没有价值,我可以节省空间。对吗?