有很多关于如何将GORM对象保存到MongoDB的教程,例如: http://blog.mongodb.org/post/18510469058/grails-in-the-land-of-mongodb。在我的情况下,我从一个服务器到另一个服务器的请求获得HTTP响应。我不知道JSON响应的确切形状,但对大部分结构都有很好的了解。
所以说我得到了一份医生名单,我知道医生的结构。每位医生都有一份患者名单,但我不知道每位患者的确切结构。
一名患者可能是:
patient : {
name: "tony",
lastIllness: "flu"
}
另一个可能是:
patient : {
name: "peter",
phoneNumber: "08678762"
}
我的目标是坚持JSON响应,就像我从HTTP请求中获取它到MongoDB并使其用户友好一样,这意味着能够为各种患者/医生运行不同的查询。
我能做到:
class Doctor {
List<Patient> patients
static embedded = ['patients']
}
class Patient {
// holds dynamic attributes
}
我可以手动解析JSON并通过执行以下操作动态创建各种Patient属性:
patient[$attributeName]=attributeValue
这会有效,但我可以看到解析变得越来越复杂和错误。请记住,我希望从HTTP请求中返回的JSON可以逐字持久保存,并且我希望此JSON可用于查询。
有更好的方法吗?
答案 0 :(得分:1)
我的情况略有相似。我已经使用Grails创建了Restful API,并且客户希望将所有请求存储到API中,并使用MongoDB中的所有参数来提取使用信息。
我创建了以下域类:
class ApiStatistic {
static mapWith = "mongo"
ObjectId id
...
Map parameters
Date dateCreated
}
然后,在拦截所有请求的过滤器中,我异步调用一个接收请求参数的服务。这里有趣的属性是参数,它是Map
。
然后,我要做的就是创建一个新的ApiStatistic
对象,并将请求的参数分配给parameters
属性。 Map
作为带有所有信息的json存储在MongoDB中。
我认为使用这种方法,只需在域类中使用Map
属性,就可以在MongoDB中持久保存JSON响应。