scala - 从 scala 将文档插入 mongodb 时出错

标签 scala mongodb

尝试从 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
        }
    }

最佳答案

乍一看,你的代码看起来还不错,尽管你有那个杂散的 def addMongo(): Unit = { 代码在顶部。我会遵从关于在此处查找错误的建议……注意两点:

1) save()insert() 是互补的操作——你只需要一个。 insert() 将始终尝试创建一个新文档...如果未设置 _id 字段,save() 将创建一个,如果是,则更新代表的 _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

看看这个优秀的writeup on MongoDB's Write Durability ,特别关注 Java 驱动程序。

您可能还想看看 Scala driver I maintain (Casbah)它包装了 Java 驱动程序并提供了更多的 Scala 功能。

我们在 safety() 中提供了安全写入概念的绕过执行方法版本,这使得测试写入成功变得容易得多。

关于scala - 从 scala 将文档插入 mongodb 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3736400/

相关文章:

performance - mongoose 在这种情况下子文档和全局之间的性能有什么区别吗?

javascript - ExpressJS 中最好的 session 存储 - NodeJS

node.js - 如何在 mongoDB 中拆分列值并在 $gt 上使用?

postgresql - 为什么 Anorm 在插入主键作为文本时抛出 TypeDoesNotMatch 异常?

scala - 如何衡量scala烫金程序的运行时间?

用于 Web URL 的 ScalaCheck 生成器

mongodb - 如何使用 docker-compose 连接到 mongodb?

json - Scala:将案例类序列化为 JSON ,备用名称

scala - 命令式类型与普通的旧子类型

python - 在 Python 中解析 OCR 响应中的日期