2017-08-31 94 views
1

我想查询以下数据:CouchDB的芒果查询(CouchDB的2.0.1)

(索取: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, ......]

或:

  • 如果数据有以下字段:

    "places": 
    { 
        "place_name": "Huntsville", 
        "longitude": -86.5673, 
        "state": "Alabama", 
        "state_abbreviation": "AL", 
        "latitude": 34.7269 
    } 
    
  • JSON有这么多的形式,我strug以获得这些查询所需的JavaScript背后的原理。 我知道这很简单。它一定很简单。

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

    编辑:

    我设法以下就一个在线的JavaScript测试网站的工作,但我还是没能得到这个在CouchDB的芒果工作。这当然可以在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); 
    
    +0

    你的请求的棘手的事情是,你试图返回一个数组元素属性。因此,我认为它不受Cloudant/CouchDB的支持。为此,您可以使用map/reduce。 –

    +0

    Hi @Alexis。谢谢你的评论re map reduce。我已经添加了一个编辑(上面),但也许它是不相关的。 – jlb333333

    +1

    @Alexis是的,map/reduce使用'places [0] .place_name'工作。谢谢。 – jlb333333

    回答

    0

    我已经能够得到的结果对我的问题的一部分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}但这可以在没有错误发生的加入。

    第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}} 
    ]} 
    

    我将不胜感激任何意见。