3

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

(来自: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);
4

1 回答 1

1

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

我的索引:

{
"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}但可以添加它而不会发生错误。

第 3 部分:

指数:

{
  "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}}
]}

我将不胜感激任何评论。

于 2017-09-04T09:14:08.823 回答