Nano Hash - криптовалюты, майнинг, программирование

Плагин Grails Mongo GORM — сопоставление чисел с плавающей запятой и байтов представляет собой строку вместо числа

При использовании плагина Grails MongoDB GORM я понял, что целые числа правильно сопоставляются с числами монго, Long сопоставляются с NumberLong и т. д.

Единственными типами, которые не отображаются должным образом, являются Byte и Float. Они сопоставлены со строками. Я ожидаю, что это будут числа монго. Нужно ли мне писать собственный маршаллер, как описано здесь:

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

Или есть более подходящий способ?

Спасибо, Матео.


  • Вы пытались указать, является ли число числом с плавающей запятой или двойным, добавив «d» или «f» в конце числа, например. 40.739037д. Тип Groovy по умолчанию для десятичных чисел — BigDecimal, который не поддерживается MongoDB. со страницы, которую вы связали. 04.06.2013
  • также, когда вы говорите Byte, вы имеете в виду массив Byte? Бинарный тип? 04.06.2013
  • Нет, я этого не делал, и, честно говоря, это было бы не так просто. Я переключил этот конкретный домен с MySQL на mongo, и было бы очень сложно это контролировать. Я знаю, что Double правильно отображается на монго - код плагина просто не указывает такие свойства, как Float, Byte и т. д. И я имею в виду Byte - число в диапазоне -128 +127 05.06.2013
  • в MongoDB нет типа Byte — вы можете увидеть поддерживаемые типы на bsonspec.org 05.06.2013
  • Я знаю, но есть Byte Java, поэтому я ожидаю, что это будет отображаться в Mongo как поддерживаемый номер, то есть int32. Как и реализован (Java) Long - я думаю, что он отображается на int64 в Mongo 05.06.2013
  • Взгляните на Типы Java. Также будет полезно, если вы покопаетесь в исходниках драйвера Java для MongoDB и посмотрите при реализации BasicBSONObject. Плагин должен использовать этот драйвер (или GMongo, обертку над драйвером Java) для взаимодействия с MongoDB. 05.06.2013

Ответы:


1

Я не вижу проблемы, которую вы описываете. Если у меня есть объект домена, который выглядит примерно так:

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 для определения полей в объекте вашего домена, поле вообще не сохраняется, я полагаю, что он использует тип поля, чтобы определить, как преобразовать его в представление BSON, требуемое MongoDB.

Итак, в заключение я не считаю, что вам нужно писать собственный маршаллер, я считаю, что это что-то вроде того, как вы определяете объект домена.

10.06.2013
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..