当前位置:  开发笔记 > 编程语言 > 正文

从scala将文档插入mongodb时出错

如何解决《从scala将文档插入mongodb时出错》经验,为你挑选了1个好方法。

试图从scala插入mongodb数据库.以下代码不创建数据库或集合.尝试使用默认测试数据库.我该如何执行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
        }
    }

Brendan W. M.. 6

乍一看,虽然你的def addMongo(): Unit = { 代码位于顶部,但代码中的内容看起来还不错.我会推迟在这里寻找错误的建议......两个注意事项:

1)save()并且insert()是互补的操作 - 你只需要一个. insert()将始终尝试创建一个新文档... save()如果_id未设置该字段将创建一个,并更新所表示的文件_id.

2)默认情况下,Mongo客户端不等待写操作的答案.MongoDB中很可能发生错误,导致写入失败.该getLastError()命令将返回当前连接上最后一次写操作的结果.因为MongoDB的Java驱动程序使用连接池,所以必须告诉它在您想要"安全"运行的操作期间将您锁定到单个连接上(例如检查结果).这是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的Write Durability上的这篇优秀文章,该文章专注于Java驱动程序.

您可能还想查看我维护的Scala驱动程序(Casbah),它包装Java驱动程序并提供更多scala功能.

我们在safe()中提供了安全写入概念的执行方法版本,这使得测试写入成功变得更加容易.



1> Brendan W. M..:

乍一看,虽然你的def addMongo(): Unit = { 代码位于顶部,但代码中的内容看起来还不错.我会推迟在这里寻找错误的建议......两个注意事项:

1)save()并且insert()是互补的操作 - 你只需要一个. insert()将始终尝试创建一个新文档... save()如果_id未设置该字段将创建一个,并更新所表示的文件_id.

2)默认情况下,Mongo客户端不等待写操作的答案.MongoDB中很可能发生错误,导致写入失败.该getLastError()命令将返回当前连接上最后一次写操作的结果.因为MongoDB的Java驱动程序使用连接池,所以必须告诉它在您想要"安全"运行的操作期间将您锁定到单个连接上(例如检查结果).这是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的Write Durability上的这篇优秀文章,该文章专注于Java驱动程序.

您可能还想查看我维护的Scala驱动程序(Casbah),它包装Java驱动程序并提供更多scala功能.

我们在safe()中提供了安全写入概念的执行方法版本,这使得测试写入成功变得更加容易.

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有