试图从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()中提供了安全写入概念的执行方法版本,这使得测试写入成功变得更加容易.
乍一看,虽然你的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()中提供了安全写入概念的执行方法版本,这使得测试写入成功变得更加容易.