2017-08-31 60 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}} 
    ]} 
    

    我將不勝感激任何意見。