【问题标题】:Couchdb document/functionCouchdb 文档/函数
【发布时间】:2014-02-21 00:39:16
【问题描述】:

在包含以下信息的文档中:

{
  "address": [{
    "Street": "123 xyz", 
    "City": "Belmont"
  }]
}

如何查看城市名称。这是正确的:

function(doc) {
  emit(doc.address.City,null);
}

它只返回null。我想看看“贝尔蒙特”这个名字。 任何帮助都将不胜感激。

【问题讨论】:

    标签: mapreduce couchdb couchdb-futon


    【解决方案1】:

    在您的数据中,address 是一个数组,因此它没有 City 属性。

    如果您的数据中只有一个地址:

    {
      "address": {
        "Street": "123 xyz", 
        "City": "Belmont"
      }
    }
    

    获取/{database}/_design/{ddoc}/_view/{view} 应该返回:

    {"rows":[
      {"key":"Belmont", "id":"{id}", "value":null}
    ]}
    

    附带说明,请注意您也可以获取/{database}/_design/{ddoc}/_view/{view}?include_docs=true

    {"rows":[
      {"key":"Belmont", "id":"{id}", "value":null, "doc":{
        "address": {
          "Street": "123 xyz", 
          "City": "Belmont"
        }
      }}
    ]}
    

    最后但同样重要的是,如果您的数据中确实需要多个地址,您可以将它们全部发送:

    function(o) {
      for each (var a in o.address) {
        emit(a.City);
      }
    }
    

    【讨论】:

    • { "name":"jack", "address": [{ "Street": "123 xyz", "City": "Belmont" }] } 如果我也有名字,我会是根据您编写的最后一个函数,能够在城市旁边看到名称。谢谢你的帮助。我想看到名称是键和城市作为值。
    • 使用include_docs=true,您确实可以获得完整的文档(带有“jack”和他的所有地址)。您需要记住的是,key 是您用来选择或排序行的,value 是您想要保留的复杂计算的结果,或者是您想要与 @ 聚合的部分结果987654332@ 函数,doc 是整个文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多