Grails Mongodb 嵌入式文档?错误?
Posted
技术标签:
【中文标题】Grails Mongodb 嵌入式文档?错误?【英文标题】:Grails Mongodb Embedded Documents ?Bug? 【发布时间】:2012-01-11 03:34:15 【问题描述】:我有这个简单的模型:
abstract class Info
ObjectId id
Date dateCreated
Date lastUpdated
class Question extends Info
String title
String content
List<Answer> answers = []
static embedded = ['answers']
class Answer
String content
以这种方式编写,answer 嵌入在 question 中(并且没有为 answer 维护 id)。我想为每个 answer 维护 id、dateCreated 和 lastUpdated 字段。所以我尝试以下方法:
class Answer extends Info
String content
当我运行一个简单的测试用例(保存一个带有 1 个答案的问题)时,我得到以下信息:
> db.question.find()
"_id" : ObjectId("4ed81d47e4b0777d795ce3c4"), "answers" : [ "content" : "its very
cool", "dateCreated" : null, "lastUpdated" : null, "version" : null ], "content" :
"whats up with mongodb?", "dateCreated" : ISODate("2011-12-02T00:35:19.303Z"),
"lastUpdated" : ISODate("2011-12-02T00:35:19.303Z"), "title" : "first question",
"version" : 0
我注意到,dateCreated 和 lastUpdate 字段不是由 Grails 自动维护的。还添加了 version 字段,但也有一个 null 值,但有趣的是没有创建 _id 字段(即使我在 Info 类中定义了 id。
在第二种情况下,我试试这个:
class Answer
ObjectId id
String content
我得到以下输出:
> db.question.find()
"_id" : ObjectId("4ed81c30e4b076cb80ec947d"), "answers" : [ "content" : "its very
cool" ], "content" : "whats up with mongodb?", "dateCreated" : ISODate("2011-12-
02T00:30:40.233Z"), "lastUpdated" : ISODate("2011-12-02T00:30:40.233Z"), "title" :
"first question", "version" : 0
这一次,id 也没有为嵌入文档创建。对这种情况有什么解释吗?为什么没有 id 属性,以及为什么 dateCreated、lastUpdated 和 version 是 空?这是打算以这种方式工作,还是一个错误?
谢谢,
【问题讨论】:
您能否发布指向 Grails 论坛上发布的问题主题的链接?您的问题得到解决了吗? 我也在想同样的事情!你得到答案了吗? 【参考方案1】:这可能是由于 grails 框架如何进行转换(GORM 模块)。 您可能会从 grails 论坛获得更快/更好的答案。 基本上,似乎某些自动行为(填写日期和 objectid)仅针对根对象,而不是子对象。 您还可以签出基于 morphia 的替代 ORM: http://www.grails.org/plugin/mongodb-morphia
【讨论】:
我见过基于 morphia 的 ORM,但我宁愿坚持使用 Springsource 赞助的那个。我将在 grails 论坛上发帖,感谢您指出这一点。以上是关于Grails Mongodb 嵌入式文档?错误?的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 数据类:如何为嵌入式文档生成 MongoDB ObjectId