当使用 Grails MongoDB GORM 插件时,我意识到 Integers 被正确映射到 mongo numbers,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
}
对于原始字节和 float 以及字节和浮点值,它们作为正确的数字类型而不是字符串插入到数据库中。我确实注意到,如果您使用 def
来定义域对象中的字段,该字段根本不会持久化,我认为它使用字段类型来计算如何将其转换为 BSON MongoDB 要求的表示。
所以总而言之,我认为您不需要编写自定义编码器,我认为这与您定义域对象的方式有关。
关于mongodb - Grails Mongo GORM 插件 - float 和字节的映射是字符串而不是数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16789007/