尝试从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
}
}
答案 0 :(得分: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
看看这个优秀的writeup on MongoDB's Write Durability,它专注于Java驱动程序。
您可能还想查看包含Java驱动程序的Scala driver I maintain (Casbah)并提供更多scala功能。
我们在安全()中提供了安全写入概念的执行方法版本,这使得测试写入成功变得更加容易。
答案 1 :(得分:4)
您错过了addMongo
中的main
来电。修复是微不足道的:
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
}
addMongo // call it!
}