1

我正在使用 Python 访问我的 ArangoDB。有时确定结果是否为空或者我是否只有一个结果会很有用len(cursor)

不幸的是,这主要导致了一个例外:

│arango.exceptions.CursorCountError: cursor count not enabled

游标的源代码中,结果集中似乎需要一个计数变量。

根据文档,这是通过添加:

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}

添加 aCOLLECT会导致错误。这篇文章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}

这是行不通的。插入这种聚合函数的正确查询是什么?

4

1 回答 1

1

TheCOLLECT WITH COUNT和 Cursor 计数是两个不同的东西。 COLLECT WITH COUNT INTO length结果,您可以获取一个文档,其中包含属性以及有多少文档具有这些不同属性的信息,例如您的用户中有多少在 25 到 30 岁之间。

游标计数是总共要获取多少个结果的信息。根据文档,您必须指定您希望光标在创建过程中提供此信息count=True,如下所示:

# Execute an AQL query which returns a cursor object.
cursor = db.aql.execute(
    'FOR doc IN students FILTER doc.age > @val RETURN doc',
    bind_vars={'val': 17},
    batch_size=2,
    count=True
)

这背后的原因是,预先计算该信息(结果集长度)的成本很高,如果可以的话,您希望避免它。

根据您的用例,当结果为空或仅包含一个元素时,不区分游标可能是更好的选择。

于 2021-10-07T12:01:01.847 回答