Grails Mongodb Вложенные документы? Ошибка? - PullRequest
3 голосов
/ 02 декабря 2011

У меня есть эта простая модель:

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
}

Написано таким образом, ответ встроен в вопрос (а не id isподдерживается для ответ ).Я хочу сохранить поля 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 не создано (даже если я определил * 1038)* id в Info class).

Во втором сценарии я пробую это:

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 равны null ?Это должно работать таким образом, или это ошибка?

Спасибо,

1 Ответ

0 голосов
/ 03 декабря 2011

это, вероятно, связано с тем, как платформа grails выполняет преобразование (модуль GORM). Вы можете получить более быстрые / лучшие ответы на форуме Grails. По сути, кажется, что некоторые из автоматических действий (заполнить даты и objectid) выполняется только для корневого объекта, а не подобъектов. Вы также можете проверить альтернативный ORM на основе морфий: http://www.grails.org/plugin/mongodb-morphia

...