Grails を使用すると、ID でドメイン オブジェクトを簡単に取得できます (REST API の構築に便利です)。
リソースを取得するコントローラーは、次のように単純です。
MetricController.groovy
import grails.converters.JSON
class MetricController {
def index() {
def resource = Metric.get(params.id)
render resource as JSON
}
}
MongoDB GORM ( compile ":mongodb:1.2.0"
) に Grails プラグインを使用する場合、デフォルトid
のタイプをorに変更するLong
必要があります。String
ObjectId
Metric.groovy
import org.bson.types.ObjectId
class Metric {
static mapWith = "mongo"
ObjectId id
String title
}
ただし、 を実行すると、次の.get(1)
ようになります。
Error 500: Internal Server Error
URI
/bow/rest/metric/1
Class
java.lang.IllegalArgumentException
Message
invalid ObjectId [1]
私は推測して、コントローラーを使用するように変更しましたfindById
:
def resource = Metric.findById(new ObjectId(new Date(), params.id.toInteger()))
これでエラーは修正されましたが、オブジェクトが見つかりません (常に null を返します)。
たとえば、「-1387348672」の ID を使用しても、次のテスト オブジェクトは見つかりません。
{ "class" : "Metric",
"id" : { "class" : "org.bson.types.ObjectId",
"inc" : -1387348672,
"machine" : 805582250,
"new" : false,
"time" : 1371329632000,
"timeSecond" : 1371329632
},
"title" : "Test"
}
このObjectId.inc
フィールドは、リソース ID に使用する正しいフィールドではない場合もあります。
では、MongoDB を使用しているときに ID でドメイン オブジェクトを取得する最も簡単な方法は何でしょうか?