使用Mongodb保持JSON响应

时间:2014-06-05 08:45:35

标签: mongodb grails gorm grails-plugin

有很多关于如何将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可用于查询。

有更好的方法吗?

1 个答案:

答案 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响应。