Couchdb 从Cloudant中的文档中提取嵌套值

Couchdb 从Cloudant中的文档中提取嵌套值,couchdb,cloudant,Couchdb,Cloudant,我在提取Cloudant(CouchDB)中存储的值时遇到问题。下面是一个存储文档的示例 { "_id": "d47cd130de736894be5c464c314f1083", "_rev": "1-2baf765d6f78bd80b4a604718063c0eb", "Name": John, "Surname": "Doe", &quo

我在提取Cloudant(CouchDB)中存储的值时遇到问题。下面是一个存储文档的示例

{
"_id": "d47cd130de736894be5c464c314f1083",
  "_rev": "1-2baf765d6f78bd80b4a604718063c0eb",
  "Name": John,
  "Surname": "Doe",
  "ID": "89884600000001936983",
  "Records": [
    {
      "SeqNo": 14776,
      "Reason": 25,
      "DateUTC": "2015-12-01 01:59:35",
      "Fields": [
        {
          "HeartRate": "68",
          "Weight": "75",
        },
        {
          "Eyesight": 20,
        },
        {
          "OtherData": {
            "1": 4217,
            "2": 1179,
            "3": 2588,
            "4": 2488,
            "5": 21
          },
          "FType": 6
        }
      ]
    },
    {
      "SeqNo": 14777,
      "Reason": 25,
      "DateUTC": "2015-12-05 02:00:35",
      "Fields": [
        {
          "HeartRate": "72",
          "Weight": "78",
        },
        {
          "Eyesight": 20,
        },
        {
          "OtherData": {
            "1": 4217,
            "2": 1198,
            "3": 2588,
            "4": 2488,
            "5": 21
          },
          "FType": 6
        }
      ]
    }
  ]
}
数据库包含许多文档,每个文档包含由序列号表示的多个数据记录。每个文档的数据记录(序列)数量可以是1到无穷大。其中一个视图应该显示一个数组,其中包含从与John Doe相关的所有文档中提取的所有值。目前该数据库只包含与John Doe有关的文档,但这将在将来发生变化

当前视图文档如下所示:

function(doc) {
  if(doc.Records) {
    doc.Records.forEach(function(SeqNo) {
      emit(SeqNo,null);
    });
  }
}
这将为每个数据记录提供以下结果(每个序列的单独结果):

第一步是确保在构造数组之前可以提取所需的值

emit(doc.SeqNo,null)不仅不提供序列号,也不提供emit(SeqNo,doc.SeqNo) 我的问题是,

如何仅提取序列号

然后如何根据结果构建数组

当我想提取OtherData.1值时,这个值会改变吗


任何帮助都将不胜感激。

forEach正在返回个人记录,我认为此视图所需的
map
功能是

function(doc) {
  if(doc.Records) {
    doc.Records.forEach(function(Record) {
      emit(Record.SeqNo, null);
    });
  }
}

非常感谢。这管用!知道如何提取嵌套值吗?例如,OtherData.1?Record.Fields.OtherData.1不起作用。查询可能限制为两个字段,如Record.fields,但不能超过这两个字段;将提取正确的值。
function(doc) {
  if(doc.Records) {
    doc.Records.forEach(function(Record) {
      emit(Record.SeqNo, null);
    });
  }
}