mongodb - Grails Mongo GORM 插件 - float 和字节的映射是字符串而不是数字

标签 mongodb grails grails-orm grails-plugin grails-2.0

当使用 Grails MongoDB GORM 插件时,我意识到 Integers 被正确映射到 mongo numbers,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

或者有什么更合适的方式吗?

谢谢, 马特奥

最佳答案

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

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/

相关文章:

MongoDB字段增量与更新语句中的最大条件

grails - 实现独立 Grails 批处理的正确方法?

grails - 是否可以将 Grails 配置为从不更改域对象,除非调用 .save()?

Grails Scaffolding 的 MongoDB 问题(在 MySQL 中不会发生)

MongoDB 高级查询——使用另一个字段的值

java - MongoDB+Java - 通过 com.mongodb.util.JSON.parse 解析 JSON

python - 如何在MongoDB中查找特定键:value 2 from python pymongo,

java - Grails XML 编码 : change default "<list>" root element name

grails - 使用 Grails 创建 Google 登录

grails - Grails:将值从 Controller 发送到 View