我正在尝试查询以下数据:
{
"post_code": 35801,
"country": "United States",
"country_abbreviation": "US",
"places": [
{
"place_name": "Huntsville",
"longitude": -86.5673,
"state": "Alabama",
"state_abbreviation": "AL",
"latitude": 34.7269
}
]
},
..........
我的问题:
- 如何在查询中首先包含 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"
}
如果数据有以下字段会怎样:
"old_post_code_numbers": [12345, 67890, ......]
或:
如果数据有以下字段会怎么样:
"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/