3

在使用 Grails MongoDB GORM 插件时,我意识到 Integers 正确映射到 mongo 数字,Long 映射到 NumberLong 等。

唯一没有正确映射的类型是 Byte 和 Float。它们被映射到字符串。我希望是 mongo 数字。我是否需要按照此处所述编写自定义编组器:

http://springsource.github.io/grails-data-mapping/mongo/manual/guide/3.%20Mapping%20Domain%20Classes%20to%20Mongo%20Collections.html#3.6%20Custom%20User%20Types

或者有没有更合适的方法?

谢谢,马特奥

4

1 回答 1

3

我没有看到你描述的问题。如果我有一个看起来像这样的域对象:

class Person {
    String firstName
    String lastName
    byte bytePrimitiveValue = 8;
    float floatPrimitiveVal = 4.38;
    Byte byteValue = 9;
    Float floatVal = 5.06;
}

然后将其插入数据库,如下所示:

def person = new Person1(firstName: "the name", lastName: "smith")
person.save()

我确实在数据库中看到了预期的类型:

{
    "_id" : NumberLong(7),
    "bytePrimitiveValue" : 8,
    "byteValue" : 9,
    "firstName" : "the name",
    "floatPrimitiveVal" : 4.380000114440918,
    "floatVal" : 5.059999942779541,
    "lastName" : "smith",
    "version" : 0
}

对于基元 byte 和 float 以及 Byte 和 Float 值,它们都作为正确的数字类型而不是字符串插入到数据库中。我确实注意到,如果您使用def在域对象中定义字段,则该字段根本不会持久化,我认为它使用字段类型来确定如何将其转换为 MongoDB 所需的 BSON 表示。

所以总而言之,我不相信您需要编写自定义编组器,我相信这与您定义域对象的方式有关。

于 2013-06-10T15:52:09.753 回答