Ошибка при вставке документа в mongodb из Scala - PullRequest
3 голосов
/ 17 сентября 2010

Попытка вставить в базу данных mongodb из scala. приведенные ниже коды не создают БД или коллекцию. попробовал использовать тестовую базу по умолчанию тоже. Как мне выполнить операции CRUD?

object Store {
      def main(args: Array[String]) = {
        def addMongo(): Unit = {
          var mongo = new Mongo()
          var db = mongo.getDB("mybd")
          var coll = db.getCollection("somecollection")
          var obj = new BasicDBObject()
      obj.put("name", "Mongo")
      obj.put("type", "db")
      coll.insert(obj)
      coll.save(obj)
      println("Saved") //to print to console
        }
    }

Ответы [ 2 ]

6 голосов
/ 17 сентября 2010

На первый взгляд все выглядит хорошо в вашем коде, хотя у вас есть этот блуждающий код 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 (), которая позволяет выполнять проверку на предмет успешности записи.

4 голосов
/ 18 сентября 2010

Вы только что пропустили вызов addMongo в main. Исправление тривиально:

object Store {
  def main(args: Array[String]) = {
    def addMongo(): Unit = {
      var mongo = new Mongo()
      var db = mongo.getDB("mybd")
      var coll = db.getCollection("somecollection")
      var obj = new BasicDBObject()
      obj.put("name", "Mongo")
      obj.put("type", "db")
      coll.insert(obj)
      coll.save(obj)
      println("Saved") //to print to console
    }

    addMongo // call it!
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...