KeyError:尝试在 couchdb 中获取视图内容时出现“行”

问题描述

我开始制作 couchdb 数据库,但不幸的是我发现了一个让我停滞不前的错误

我在数据库中有一些这样的文件

{
  "_id": "001169c8-16a9-400b-831d-61f4134e1cd3","_rev": "2-c95e7385f0ad6a249906a8a2e60341de","type": "word","word": "quién","creation-date": "2020-12-19T19:54:06.954539","sentences": {
    "00789ff2-e38e-414b-a3f5-c2282aeeb42e": {
      "sentence": "No sé       quién se lo ha metido por la cabeza,dice que le pongo en ridículo       si no voy","source": "foundation","date": "2020-12-19T19:47:48.114888"
    },"01b40374-1103-4fd5-95dd-fd5d8eddbd21": {
      "sentence": "— Y a vuestra merced,¿quién le fía,señor cura","date": "2020-12-19T19:43:10.510990"
    }
  }
}

并且我设计了一个视图来仅恢复这些文档的“单词”部分:

function (doc) {
  if( doc.type == 'word')
  emit(doc.word,1);
}

最后,在 python 中,我创建了一个简单的脚本来恢复该视图中的文档:

def processEntries( db : couchdb.Database ):
    for row in db.iterview( '_design/all_words',100,group=True ) :
        print( f"{row=}")

但不幸的是,我收到此错误(仅显示最后几行):

  File "/home/rluna/wkcpp/lib/corpus_env/lib/python3.8/site-packages/couchdb/client.py",line 1041,in iterview
    rows = list(self.view(name,wrapper,**options))
  File "/home/rluna/wkcpp/lib/corpus_env/lib/python3.8/site-packages/couchdb/client.py",line 1361,in __len__
    return len(self.rows)
  File "/home/rluna/wkcpp/lib/corpus_env/lib/python3.8/site-packages/couchdb/client.py",line 1378,in rows
    self._fetch()
  File "/home/rluna/wkcpp/lib/corpus_env/lib/python3.8/site-packages/couchdb/client.py",line 1366,in _fetch
    self._rows = [wrapper(row) for row in data['rows']]
KeyError: 'rows'

对正在发生的事情有什么想法吗?

解决方法

发现问题。首先,group=True 对于这个上下文是不正确的,因为我根本不想对结果进行分组。

其次,问题在于必须调用视图的方式。视图位于设计文档中,因此要唯一标识视图,您必须提供设计文档视图文档的名称。换句话说,python代码必须这样改:

def processEntries( db : couchdb.Database ):
    for row in db.iterview( 'all_words/all_words',100 ) :
        print( f"{row=}")