![](/img/trans.png)
[英]MongoDB: Collection named “createCollection” how to drop it?
[英]MongoDriver for Scala + http4s : How to check if createCollection() throws an exception?
我是 Scala - http4s 初學者。
我必須使用帶有 http4s 的 Scala 為我的工作創建一個 MVC 應用程序,但我面臨以下問題:
我的任務之一是為一些請求創建新的數據庫,所以我開始在我的存儲庫中設計函數“createDatabase”。
根據文檔:
MongoDatabase 實例提供了與數據庫交互的方法,但數據庫可能實際上並不存在,只會在通過某種方式插入數據時創建; 例如創建集合或插入文檔
所以我的代碼是:
def createDatabase(databaseName: String) = {
IO.fromFuture(IO {
MongoClient("con_string").getDatabase(databaseName).createCollection("any_name").head()
})
}
期望將創建一個包含名稱為“any_name”的集合的新數據庫。
如果使用已存在的數據庫名稱調用 createDatabase ,則操作將失敗,並在控制台中輸出:
com.mongodb.MongoCommandException: 命令失敗,錯誤 48 (NamespaceExists): '集合已經存在。 NS: NewDbTest.customers' 在服務器 localhost:27017 上。 完整的響應是 {"ok": 0.0, "errmsg": "Collection already exists. NS: NewDbTest.customers", "code": 48, "codeName": "NamespaceExists"}
我嘗試使用 try {} catch、Try {}、withRecover() 等等,希望能捕獲此異常並以異常消息響應,但沒有任何效果。
一些例子:
def createDatabase(databaseName: String) = {
IO.fromFuture(IO {
try {
MongoClient("con_string").getDatabase(databaseName).createCollection("any_name").head()
}
catch {
case e: MongoCommandException => println("we have exception")
Future.successful(e.getErrorMessage)
}
})
}
def createDatabase(databaseName: String) = {
IO.fromFuture(IO {
client.getDatabase(databaseName).createCollection("any_name").map(operation => Try {operation}).head()
})
}
def createDatabase(databaseName: String) = {
IO.fromFuture(IO {
client.getDatabase(databaseName).createCollection("any_name").head() recover {
case exception: Exception => Future.successful(exception.getMessage)
}
})
}
由於保密工作協議,一些片段被混淆。
請幫我。
謝謝 !
使用atempt
解決了問題
def createDatabase(databaseName: String) = {
IO.fromFuture(IO {
MongoClient("con_string").getDatabase(databaseName).createCollection("any_name").head()
}).attempt
}
但是,無論發生什么,似乎錯誤消息都是由日志記錄器在調試級別打印的。 所以我也將日志級別更改為 INFO。
Logger.getRootLogger.setLevel(Level.INFO)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.