Couchdb检索数组中的文档

时间:2014-12-26 07:45:53

标签: javascript mapreduce couchdb

以下文档是一个存储在CouchDB中的小例子。

{
  "_id": "Test4",
  "referenceName": "refA",
  "positions": {
      "A": 422,
      "B": 5442
  },


  "properties": [
      {
          "tId": "ARQ3TPR7",
          "pos": 4609,
          "zIds": [
              "z0003674",
              "z0008150",
              "z0016020",
              "z0016021"
          ]
      }
  ],
  ...
}

以下地图功能不起作用,我不知道如何修复它。我得到了Error: compilation_error Expression does not eval to a function。我想要检索_idreferenceNamepositions

{
  "_id": "_design/doc",
  "views": {
    "by_zIds": {
      "map": "function(doc) {
                for (var i in properties {
                  var d = doc.properties[i];
                  for (var x in d.zIds){
                    emit(d.zIds[x], doc);
                  }
                }
              }"
    }
  },
  "language": "javascript"
}

如何修复上述地图功能以使用/dbname/_design/doc/_view/by_zIds?key="z0016021"之类的视图?

2 个答案:

答案 0 :(得分:1)

地图功能)后有properties个缺失。可能还有其他错别字。我建议你在一个带有语法高亮的编辑器中编写你的地图函数,然后在本地编写你的地图函数,以便尽早发现这些错误。

编辑:您的地图功能还有其他一些问题,所有问题都可以通过单元测试和/或调试找到。这应该有效,但我还没有测试过:

function(doc) {
    for (var d in doc.properties) {
        for (var x in d.zIds) {
            emit(x, doc);
        }
    }
}

答案 1 :(得分:0)

我用以下方式解决了它,但我不确定它是否是最好的方法

function(doc) {
    for (var i in doc.properties) {
        for (var x in doc.properties[i].zIds) {
            emit(doc.properties[i].zIds[x], doc);
        }
    }
}

是否有可能改善?