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 维护 iddateCreatedlastUpdated 字段。所以我尝试以下方法:

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 

我注意到,dateCreatedlastUpdate 字段不是由 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 属性,以及为什么 dateCreatedlastUpdatedversion?这是打算以这种方式工作,还是一个错误?

谢谢,

【问题讨论】:

您能否发布指向 Grails 论坛上发布的问题主题的链接?您的问题得到解决了吗? 我也在想同样的事情!你得到答案了吗? 【参考方案1】:

这可能是由于 grails 框架如何进行转换(GORM 模块)。 您可能会从 grails 论坛获得更快/更好的答案。 基本上,似乎某些自动行为(填写日期和 objectid)仅针对根对象,而不是子对象。 您还可以签出基于 morphia 的替代 ORM: http://www.grails.org/plugin/mongodb-morphia

【讨论】:

我见过基于 morphia 的 ORM,但我宁愿坚持使用 Springsource 赞助的那个。我将在 grails 论坛上发帖,感谢您指出这一点。

以上是关于Grails Mongodb 嵌入式文档?错误?的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 数据类:如何为嵌入式文档生成 MongoDB ObjectId

如何在不同深度内搜索 MongoDB 嵌套子文档

如何在不同深度内搜索 MongoDB 嵌套子文档

使用 arrayFilters 更新 MongoDB 中的嵌套子文档

mongoDB在java中怎么根据内嵌文档条件查询

匹配 MongoDB 中嵌套子文档的嵌套数组