Мотор возвращается Нет

Я использую драйвер мотора для подключения к БД Mongo. Ниже приведен код для вставки данных в коллекцию

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

Оператор вставки всегда возвращает None. Это не приложение Торнадо. Может ли мотор использоваться только с Торнадо? Если нет, то почему вставка ничего не возвращает?

2 ответа

Вы используете мотор так же, как пимонго. Но мотор асинхронный: это означает, что когда ваша печать выполняется, возможно, запрос БД еще не завершен. Кроме того, вставка двигателя ничего не возвращает, и вам нужно использовать функцию обратного вызова в качестве второго аргумента. Ср Различия между pymongo и motor, и руководство по моторике о том, как вставить документ.

В вашем случае, хороший способ это будет:

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

Я предполагаю, что WriteConcern не установлен от клиента-драйвера.

Если вы установите его как safe=true, тогда вы получите статус операции вставки. В противном случае с safe=false операция вставки запускается и забывается.

Ты можешь попробовать:

motor.MotorClient('mongodb://localhost:27017/?safe=true')
Другие вопросы по тегам