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