javascript - CouchDB Mango 查询 (CouchDB 2.0.1)

标签 javascript json couchdb-mango couchdb-2.x

我正在尝试查询以下数据:

(获取自:https://dotnetcodr.com/2017/06/21/introduction-to-couchdb-with-net-part-17-starting-with-mango-queries/)

{
      "post_code": 35801,
      "country": "United States",
      "country_abbreviation": "US",
      "places": [
        {
          "place_name": "Huntsville",
          "longitude": -86.5673,
          "state": "Alabama",
          "state_abbreviation": "AL",
          "latitude": 34.7269
        }
      ]
    },

    ..........

我的问题:

  1. 如何在查询中首先包含 place_name。

以下 javascript 不给出结果:

{
    "selector": {
        "post_code": {"$eq": 35801}
    },
    "fields":["places.placename"]
}

正确的 post_code 索引:

{
  "index": {
    "fields": [
      "post_code"
    ]
  },
  "type": "json",
  "name": "post-code-index"
}

我确实设置了一个额外的索引如下:

{
  "index": {
    "fields": [
      "places.placename"
    ]
  },
  "type": "json"
}
  1. 如果数据有以下字段会怎样:

    "old_post_code_numbers": [12345, 67890, ......]

或:

  1. 如果数据有以下字段会怎么样:

    "places": 
    {
      "place_name": "Huntsville",
      "longitude": -86.5673,
      "state": "Alabama",
      "state_abbreviation": "AL",
      "latitude": 34.7269
    }
    

JSON 有多种形式,我很难掌握这类查询所需的 javascript 背后的原则。 我知道这很简单。它必须很简单。

非常感谢我应该/可以访问的任何指导或网站。

编辑:

我设法让以下内容在在线 javascript 测试站点上运行,但我仍然无法在 CouchDB Mango 中运行它。当然这在 CouchDB 中是可能的。???

var xxx=
     {
      "post_code": 82941,
      "country": "United States",
      "country_abbreviation": "US",
      "places": [
        {
          "place_name": "Pinedale",
          "longitude": -109.8561,
          "state": "Wyoming",
          "state_abbreviation": "WY",
          "latitude": 42.8543
        }]
 }

console.log(xxx.places[0].place_name);

最佳答案

我已经能够得到我问题的第 1 部分的结果(基于对 this question 的回答),如下所示:

我的索引:

{
"type": "json",
 "def": {
  "fields": [
   {
    "places.0.place_name": "asc"
   }
  ]
 }
}

我的查询:

{
  "selector": {
    "places.0.place_name": {
        "$gte": null
      }

  },
  "fields": [
    "_id",
    "places.0.place_name"
  ],
  "sort": [
    {
      "places.0.place_name": "asc"
    }
  ]
}

结果:

{"docs":[
{"_id":"254b9a8c7a46934363076cc3d9034082","places":{"0":{"place_name":"Aberdeen"}}},
{"_id":"254b9a8c7a46934363076cc3d9037559","places":{"0":{"place_name":"Altavista"}}},
{"_id":"254b9a8c7a46934363076cc3d900e4d2","places":{"0":{"place_name":"Anchorage"}}},
{"_id":"254b9a8c7a46934363076cc3d900f3b9","places":{"0":{"place_name":"Anchorage"}}},
{"_id":"254b9a8c7a46934363076cc3d902c738","places":{"0":{"place_name":"Ashland"}}},
{"_id":"254b9a8c7a46934363076cc3d901a2f2","places":{"0":{"place_name":"Atlanta"}}},
{"_id":"254b9a8c7a46934363076cc3d901a374","places":{"0":{"place_name":"Atlanta"}}} 
.................

在这种情况下,我省略了 "post_code": {"$eq": 35801} 但可以在不发生错误的情况下添加它。

第三部分:

索引:

{
  "index": {
    "fields": [
      {
        "places.place_name": "asc"
      }
    ]
  },
  "type": "json"
}

查询:

{
  "selector": {
    "places.place_name": {
        "$gte": null
      }

  },
  "fields": [
    "places.place_name"
  ],
  "sort": [
    {
      "places.place_name": "asc"
    }
  ]
}

Result:

{"docs":[
{"places":{"place_name":"Anchorage"}},
{"places":{"place_name":"Anchorage"}},
{"places":{"place_name":"Huntsville"}},
{"places":{"place_name":"Huntsville"}},
{"places":{"place_name":"Phoenix"}},
{"places":{"place_name":"Phoenix"}}
]}

第 2 部分:

索引:

{
  "index": {
    "fields": [
      {
        "old_post_code_numbers": "asc"
      }
    ]
  },
  "type": "json"
}

查询:

{
  "selector": {
    "old_post_code_numbers": {
        "$gte": null
      }

  },
  "fields": [
    "places.place_name",
    "old_post_code_numbers"
  ],
  "sort": [
    {
      "old_post_code_numbers": "asc"
    }
  ]
}

结果:

{"docs":[
{"places":{"place_name":"Huntsville"},"old_post_code_numbers":[12345,67890]},
{"places":{"place_name":"Huntsville"},"old_post_code_numbers":[12345,67890]},
{"places":{"place_name":"Anchorage"},"old_post_code_numbers":[12345,67890]},
{"places":{"place_name":"Anchorage"},"old_post_code_numbers":[12345,67890]},
{"places":{"place_name":"Phoenix"},"old_post_code_numbers":[12345,67890]},
{"places":{"place_name":"Phoenix"},"old_post_code_numbers":[12345,67890]}
]}

最后一个示例使用:"old_post_code_numbers.0" 整个过程,给出:

{"docs":[
{"places":{"place_name":"Huntsville"},"old_post_code_numbers":{"0":12345}},
{"places":{"place_name":"Huntsville"},"old_post_code_numbers":{"0":12345}},
{"places":{"place_name":"Anchorage"},"old_post_code_numbers":{"0":12345}},
{"places":{"place_name":"Anchorage"},"old_post_code_numbers":{"0":12345}},
{"places":{"place_name":"Phoenix"},"old_post_code_numbers":{"0":12345}},
{"places":{"place_name":"Phoenix"},"old_post_code_numbers":{"0":12345}}
]}

如有任何意见,我将不胜感激。

关于javascript - CouchDB Mango 查询 (CouchDB 2.0.1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45976416/

相关文章:

full-text-search - CouchDB 全文搜索

javascript - Twitter API - 如果超出速率限制

android - 如何使用 Volley 库上传图片?

javascript - React.js 和 JSON : Dynamic Styles?

javascript - 使用 Node.js 接收嵌套的 JSON 对象

CouchDB Mango 查询 - 将值与数组项匹配

couchdb - 如何在不提供 "limit"字段的情况下使用 Mango 查询 couchDB 获取无限文档?

javascript - 登录后在 chrome 扩展中弹出窗口

javascript - 使用 javascript 或 jquery 更改内联样式

javascript - 在 iOS/iphone/ipad 中放大时 jqueryui 对话框的位置问题