3

我有这个简单的模型:

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)。我想为每个答案维护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 自动维护的。还添加了版本字段,但也有一个值,但有趣的是没有创建_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属性,为什么dateCreatedlastUpdatedversionnull?这是打算以这种方式工作,还是一个错误?

谢谢,

4

1 回答 1

-1

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

于 2011-12-03T01:17:16.303 回答