试图从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
}
}
Run Code Online (Sandbox Code Playgroud)
乍一看,虽然你的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
Run Code Online (Sandbox Code Playgroud)
看看MongoDB的Write Durability上的这篇优秀文章,该文章专注于Java驱动程序.
您可能还想查看我维护的Scala驱动程序(Casbah),它包装Java驱动程序并提供更多scala功能.
我们在safe()中提供了安全写入概念的执行方法版本,这使得测试写入成功变得更加容易.