2016-07-24 16 views
0

我有一個字段「userid」的索引設置。當我嘗試使用$和$進行查詢時,我收到了錯誤的請求。

query = cloudant.query.Query(db,selector={'$or':[{'userid': 35916}, {'userid': 11035}]},fields=['userid']) 

添加「_id」首先正常工作,但首先獲取所有文檔需要太長的時間。

query = cloudant.query.Query(db,selector={'_id':{'$gt':0},'$or':[{'userid': 35916}, {'userid': 11035}]},fields=['userid']) 

當使用$ in而不是$或時,我會得到類似的結果。我錯過了什麼可以快速進行查詢?

+0

你正在使用什麼索引類型:'「json」'或'「text」'?本文對差異有很好的解釋:https://cloudant.com/blog/cloudant-query-grows-up-to-handle-ad-hoc-queries/ – brobes

回答

1

對於它的價值,我創建了一個"type": "json" Cloudant查詢索引,並遵循http://python-cloudant.readthedocs.io/en/latest/getting_started.html的python-cloudant文檔來編寫一些簡單的測試代碼。這段代碼爲我工作:

import cloudant 

client = cloudant.Cloudant("username", "password", account="account_name") 
client.connect() 
session = client.session() 
db = client['testdb'] 

query1 = cloudant.query.Query(db,selector={'$or':[{'userid': 35916}, {'userid': 11035}]},fields=['_id', 'userid']) 
#query2 = cloudant.query.Query(db,selector={'_id':{'$gt':0},'$or':[{'userid': 35916}, {'userid': 11035}]},fields=['_id', 'userid']) 

for doc in query1.result: 
    print doc 

client.disconnect() 

它返回:

{u'_id': u'266f9caae40012a04ce9223ccc67c8bd', u'userid': 35916} 
{u'_id': u'5ff2cb156d16783492adb3eb8e2e0aec', u'userid': 11035} 
+0

這很奇怪。我想知道我是否改變了其他地方會引起錯誤請求錯誤的東西。 – pynewb

+0

np。它能爲您提供幫助嗎? – brobes

+0

即使在嘗試您的代碼時,我仍然收到錯誤的請求錯誤。你知道還有什麼可能導致這種情況嗎?如果我有多個用userid設置的索引,那麼這是一個問題? – pynewb

0

我的觀察:$或者和$在查詢甚至抱怨沒有找到一個索引,即使查詢上_id和使用_all_docs指數。我認爲這可以歸結爲數據庫引擎中不太好的查詢計劃。我正在使用CouchDB 2.0。