我正在使用Python访问ArangoDB,有时使用len(cursor)
来判断结果是空的还是只有一个结果会很有用。
不幸的是,这通常会导致一个例外:
│arango.exceptions.CursorCountError: cursor count not enabled
在source code of the cursor中,结果集中似乎需要一个计数变量。
根据文档,这是通过添加以下内容实现的:
COLLECT WITH COUNT INTO length
在我的例子中,我使用了一个简单的、大部分自动生成的查询来过滤所有内容:
FOR i IN nodes
FILTER i.ID == "3000" OR i.ID == "3005" OR i.ID == "11235"
RETURN {'_id':i._id,'id':i.id}
添加一个COLLECT
会导致一个错误。这篇文章https://stackoverflow.com/a/24131344/2516892会建议如下的解决方案:
FOR m IN nodes
FILTER m.ID == "3000" OR m.ID == "3005" OR m.ID == "11235"
COLLECT WITH COUNT INTO length
RETURN {'_id':i._id,'id':i.id, 'length': length}
这是不工作的。插入这种聚合函数的正确查询是什么?
1条答案
按热度按时间plicqrtu1#
COLLECT WITH COUNT
和Cursor计数是两个不同的东西。COLLECT WITH COUNT INTO length
允许您获得一个文档作为结果,其中包含属性和有多少文档具有这些不同属性的信息,例如,有多少用户的年龄在25到30岁之间。游标计数是指总共要读取多少结果的信息。根据文档,您必须指定希望游标在使用
count=True
创建时提供此信息,如下所示:这背后的原因是,预先计算该信息(结果集长度)的成本很高,如果可以的话,您希望避免它。
根据您的用例,当结果为空或仅包含一个元素时,最好不要区别对待游标。