На первый взгляд все выглядит хорошо в вашем коде, хотя у вас есть этот блуждающий код def addMongo(): Unit = {
вверху.Я отложу предложение по поиску ошибок здесь ... Два примечания:
1) save()
и insert()
являются дополнительными операциями - вам нужен только один.insert()
всегда будет пытаться создать новый документ ... save()
создаст его, если поле _id
не установлено, и обновит отображаемое _id
, если это так.
2) Клиенты Mongo по умолчанию не ждут ответа на операцию записи.Вполне возможно и вероятно, что в MongoDB происходит ошибка, приводящая к сбою записи.команда getLastError()
вернет результат последней операции записи в текущем соединении.Поскольку драйвер Java MongoDB использует пулы соединений, вы должны сказать ему, чтобы он блокировал вас на одном соединении на время операции, которую вы хотите выполнить «безопасно» (например, результат проверки).Это самый простой способ использования драйвера Java (в Scala, хотя и с примерами кода):
mongo.requestStart() // lock the connection in
coll.insert(obj) // attempt the insert
getLastError.throwOnError() // This tells the getLastError command to throw an exception in case of an error
mongo.requestDone() // release the connection lock
Посмотрите на эту превосходную рецензию на долговечность записи MongoDB , которая специально фокусируетсяв драйвере Java.
Возможно, вы также захотите взглянуть на поддерживаемый мной драйвер Scala (Casbah) , который упаковывает драйвер Java и обеспечивает больше функций scala.
Мы предоставляем, среди прочего, версию концепта безопасной записи в методе safe (), которая позволяет выполнять проверку на предмет успешности записи.