如何使用我的原始密钥从 Python 客户端识别 Cloudant 数据库中的文档?
How to use my original key for identifying a doc in Cloudant db from Python client?
我正在开发 Cloundant 的 python 客户端程序。
我想检索一个文档,不是基于“_id”,而是基于我自己的领域。
尽管如此,它仍然无法导致 Key Error。非常感谢任何解决此错误的帮助!
这是我的代码:
from cloudant.client import Cloudant
from cloudant.error import CloudantException
from cloudant.result import Result,ResultByKey
...
client.connect()
databaseName = "mydata1"
myDatabase = client[databaseName]
# As direct access like 'doc = myDatabase[<_id>]' cannot work for my key,
# let's check on by one ...
for document in myDatabase:
# if document['_id']== "20170928chibikasmall": <= if I use _id it's ok
if document['gokigenField']== 111:
这个原因
KeyError :'gokigenField'
事先,我使用仪表板创建了 gokigenField 索引,然后通过我的邮递员使用 REST 确认结果 API
GET https://....bluemix.cloudant.com/mydata1/_index
结果如下:
{"total_rows":2,"indexes":[{"ddoc":null,"name":"_all_docs","type":"special","def":{"fields":[{"_id":"asc"}]}},{"ddoc":"_design/f7fb53912eb005771b736422f41c24cd26c7f06a","name":"gokigen-index","type":"text","def":{"default_analyzer":"keyword","default_field":{},"selector":{},"fields":[{"gokigenField":"number"}],"index_array_lengths":true}}]}
此外,我已经确认我可以在 cloudant 仪表板上很好地使用此 gokigenField 作为查询索引以及 POST 查询。
我新创建的 "gokigenField" 没有包含在数据库中的所有文档中,因为自动创建的文档 ("_design/xxx) 没有该字段。
当我从我的 Python 客户端调用它时,我想这可能会导致 KeyError。
我在参考资料中找不到用于检查 'if a specific key exists or not in a document' 的 Cloudant API。因此,不知道如何绕过此类文档...
这是如何索引来自 Python 客户端的查询数据。假设我们已经导入了库并且在 myDatabase
.
中有一个数据库客户端
首先我创建了一些数据:
#create some data
data = { 'name': 'Julia', 'age': 30, 'pets': ['cat', 'dog', 'frog'], 'gokigenField': 'a' }
myDatabase.create_document(data)
data = { 'name': 'Fred', 'age': 30, 'pets': ['dog'], 'gokigenField': 'b' }
myDatabase.create_document(data)
data = { 'name': 'Laura', 'age': 31, 'pets': ['cat'], 'gokigenField': 'c' }
myDatabase.create_document(data)
data = { 'name': 'Emma', 'age': 32, 'pets': ['cat', 'parrot', 'hamster'], 'gokigenField': 'c' }
myDatabase.create_document(data)
我们可以检查数据是否存在于 Cloudant 仪表板中或通过执行以下操作:
# check the data is there
for document in myDatabase:
print(document)
接下来我们可以选择索引字段 gokigenField
,如下所示:
# create an index on the field 'gokigenField'
mydb.create_query_index(fields=['gokigenField'])
然后我们可以查询数据库:
# do a query
selector = {'gokigenField': {'$eq': 'c'}}
docs = mydb.get_query_result(selector)
for doc in docs:
print (doc)
输出两个匹配的文档。
我正在开发 Cloundant 的 python 客户端程序。 我想检索一个文档,不是基于“_id”,而是基于我自己的领域。 尽管如此,它仍然无法导致 Key Error。非常感谢任何解决此错误的帮助!
这是我的代码:
from cloudant.client import Cloudant
from cloudant.error import CloudantException
from cloudant.result import Result,ResultByKey
...
client.connect()
databaseName = "mydata1"
myDatabase = client[databaseName]
# As direct access like 'doc = myDatabase[<_id>]' cannot work for my key,
# let's check on by one ...
for document in myDatabase:
# if document['_id']== "20170928chibikasmall": <= if I use _id it's ok
if document['gokigenField']== 111:
这个原因
KeyError :'gokigenField'
事先,我使用仪表板创建了 gokigenField 索引,然后通过我的邮递员使用 REST 确认结果 API
GET https://....bluemix.cloudant.com/mydata1/_index
结果如下:
{"total_rows":2,"indexes":[{"ddoc":null,"name":"_all_docs","type":"special","def":{"fields":[{"_id":"asc"}]}},{"ddoc":"_design/f7fb53912eb005771b736422f41c24cd26c7f06a","name":"gokigen-index","type":"text","def":{"default_analyzer":"keyword","default_field":{},"selector":{},"fields":[{"gokigenField":"number"}],"index_array_lengths":true}}]}
此外,我已经确认我可以在 cloudant 仪表板上很好地使用此 gokigenField 作为查询索引以及 POST 查询。
我新创建的 "gokigenField" 没有包含在数据库中的所有文档中,因为自动创建的文档 ("_design/xxx) 没有该字段。 当我从我的 Python 客户端调用它时,我想这可能会导致 KeyError。
我在参考资料中找不到用于检查 'if a specific key exists or not in a document' 的 Cloudant API。因此,不知道如何绕过此类文档...
这是如何索引来自 Python 客户端的查询数据。假设我们已经导入了库并且在 myDatabase
.
首先我创建了一些数据:
#create some data
data = { 'name': 'Julia', 'age': 30, 'pets': ['cat', 'dog', 'frog'], 'gokigenField': 'a' }
myDatabase.create_document(data)
data = { 'name': 'Fred', 'age': 30, 'pets': ['dog'], 'gokigenField': 'b' }
myDatabase.create_document(data)
data = { 'name': 'Laura', 'age': 31, 'pets': ['cat'], 'gokigenField': 'c' }
myDatabase.create_document(data)
data = { 'name': 'Emma', 'age': 32, 'pets': ['cat', 'parrot', 'hamster'], 'gokigenField': 'c' }
myDatabase.create_document(data)
我们可以检查数据是否存在于 Cloudant 仪表板中或通过执行以下操作:
# check the data is there
for document in myDatabase:
print(document)
接下来我们可以选择索引字段 gokigenField
,如下所示:
# create an index on the field 'gokigenField'
mydb.create_query_index(fields=['gokigenField'])
然后我们可以查询数据库:
# do a query
selector = {'gokigenField': {'$eq': 'c'}}
docs = mydb.get_query_result(selector)
for doc in docs:
print (doc)
输出两个匹配的文档。