在使用 Grails MongoDB GORM 插件时,我意识到 Integers 正确映射到 mongo 数字,Long 映射到 NumberLong 等。
唯一没有正确映射的类型是 Byte 和 Float。它们被映射到字符串。我希望是 mongo 数字。我是否需要按照此处所述编写自定义编组器:
或者有没有更合适的方法?
谢谢,马特奥
在使用 Grails MongoDB GORM 插件时,我意识到 Integers 正确映射到 mongo 数字,Long 映射到 NumberLong 等。
唯一没有正确映射的类型是 Byte 和 Float。它们被映射到字符串。我希望是 mongo 数字。我是否需要按照此处所述编写自定义编组器:
或者有没有更合适的方法?
谢谢,马特奥
我没有看到你描述的问题。如果我有一个看起来像这样的域对象:
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 表示。
所以总而言之,我不相信您需要编写自定义编组器,我相信这与您定义域对象的方式有关。