如何在索引位置查找或更新嵌套数组元素的值

时间:2019-06-12 12:24:31

标签: javascript node.js mongodb

我想使用Node.js MongoDB驱动程序在给定索引下查找嵌套数组的元素和一个嵌套数组的元素。

以下是数据看起来像的一个例子:

{
  "_id": "ObjectId('5d00e4ede5527164b6051797')",
  "timestamp": 1560339693539,
  "slices": [
    {
      "image": "/dev/shm/tmpBlecUn/S000008_P1.png",
      "data": 123,
      "force": 16012
    },
    {
      "image": "/dev/shm/tmpBlecUn/S000009_P1.png",
      "data": 345,
      "force": 15989
    },
    {
      "image": "/dev/shm/tmpBlecUn/S000010_P1.png",
      "data": 567,
      "force": 15870
    }
  ]
}

例如,现在,我想获取或更新“切片”数组中特定索引位置的“力”的值。

我似乎找不到正确的查询或方法来执行此操作。我有一个破旧的解决方案来获取正确的元素,但“数据”字段通常包含大量数据,我不想总是获取整个slices数组(> 10mb)。

这是我获取力值的垃圾解决方案:

function get_IdPrintLayerForce(_id, layer, callback) {
    MongoClient.connect(conf.dbURL, {useNewUrlParser: true},
        function(err, client) {
          if (err) log.error(err);
          const db = client.db(conf.dbName);
          const collection = db.collection('print');
          collection.findOne({_id: id}, {projection: {slices: true}}, 
          function(err, res) {
            if (err) log.error(err);
            client.close();
            const force = res['slices'][layer-1];
            log.silly('Fetched specific layer force from print: ' + force);
            callback(force, err);
          });
        });
  }

0 个答案:

没有答案