电机返回无

时间:2013-05-05 04:58:49

标签: mongodb python-2.7 motordriver tornado-motor

我正在使用Motor驱动程序连接到Mongo DB。 以下是将数据插入集合的代码

  client = motor.MotorClient('mongodb://localhost:27017').open_sync()
  conn = client['database']['collection']
  result = conn.insert({'foo': 'bar'}) 
  print 'result:', result

insert语句始终返回None。 这不是Tornado应用程序。 电机只能用于龙卷风吗? 如果没有,为什么插入没有返回?

2 个答案:

答案 0 :(得分:2)

你像pymongo一样使用马达。但是motor是异步的:这意味着当你的print执行时,db请求可能还没有完成。 此外,电机插入不会返回任何内容,您需要使用回调函数作为第二个参数。参看the differences between pymongo and motorthe motor tutorial on how to insert a document

在你的情况下,解决这个问题的好方法是:

client = motor.MotorClient('mongodb://localhost:27017').open_sync()
conn = client['database']['collection']
result = conn.insert({'foo': 'bar'}, callback=once_done) 

def once_done(result, error):
    if error: print 'error:', error
    else:
        print 'result:', result

答案 1 :(得分:0)

我猜,WriteConcern不是从客户端驱动程序设置的。

如果将其设置为safe = true,那么您将获得插入操作的状态。否则使用safe = false,插入操作就会被激活而忘记。

您可以尝试:

motor.MotorClient('mongodb://localhost:27017/?safe=true')