-->

BadYieldError when using find() Motor [MongoDB + T

2020-03-31 03:16发布

问题:

I am new to python tornado framework. I have a small collection of data in MongoDB. I am using a simple get function in my python file. I get a BadYieldError when using the db.collection.find() option. But db.collection.find_one() works fine but it display only one record.

import tornado
import bson
from bson import json_util
from bson.json_util import dumps
class TypeList(APIHandler):
@gen.coroutine
def get(self):
    doc = yield db.vtype.find()
    self.write(json_util.dumps(doc))

The error is:

tornado.gen.BadYieldError: yielded unknown object MotorCursor()

回答1:

find returns a MotorCursor. Yield the cursor's fetch_next property to advance the cursor and call next_object() to retrieve the current document:

@gen.coroutine
def do_find():
    cursor = db.test_collection.find({'i': {'$lt': 5}})
    while (yield cursor.fetch_next):
        document = cursor.next_object()
        print document

Please refer to the tutorial section Querying for More Than One Document for instructions on using Motor's find and MotorCursor.