1

我在使用 Motor 的聚合函数时遇到了no fetch_next异常

代码是

cursor = db[collection].aggregate(myPipeline, cursor = {} )

if (yield cursor.fetch_next):
    obj = bson.json_util.dumps(cursor.next_object())
    self.write(obj)

打嗝了以下

例外::'TracebackFuture' 对象没有属性 'fetch_next'

然后我尝试了在 SO question 中找到的以下内容

 cursor = yield motor.Op(db[collection].aggregate, x_query)

提供了同样的例外。

在 Mongo shell 中运行聚合会产生真正的结果

"result" : [
    {
        "_id" : "Adam",
        "num" : 110
    },
    {
        "_id" : "Argyle",
        "num" : 77
    },
    {
        "_id" : "Net Valley",
        "num" : 67
    },
    {
        "_id" : "Notts Farm",
        "num" : 64
    },
    {
        "_id" : "Sam's Place",
        "num" : 59
    },
    {
        "_id" : "Tilly",
        "num" : 58
    },
    {
        "_id" : "Xavier",
        "num" : 52
    }
],
"ok" : 1

Motor 没有提供这样的问题find和`find_one。事实上,它在其他方面工作得很棒。

安装是通过pip install motor在 Ubuntu 上完成的。

干杯

4

1 回答 1

3

对不起,文档有误。"aggregate" 返回一个 Future,你必须让 Future 获得一个游标:

cursor = yield db[collection].aggregate(myPipeline, cursor={})

if (yield cursor.fetch_next):
    obj = bson.json_util.dumps(cursor.next_object())
    self.write(obj)

我为自己分配了一张票MOTOR-34来跟踪下一个版本的这个问题。

于 2014-06-09T20:02:40.037 回答