Преобразование синтетической функции «<<» в Scala в команду MongoDB - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь обновить некоторые поля в оболочке MongoDB, используя aggregation framework.Я на самом деле хочу преобразовать IP-адреса в настоящее время как String тип в collection в Long тип, и поэтому необходимо преобразовать следующий код scala в MongoDB команду:

   def ipv4ToLong(ip: String): Option[Long] = Try(
     ip.split('.').ensuring(_.length == 4)
       .map(_.toLong).ensuring(_.forall(x => x >= 0 && x < 256))
       .reverse.zip(List(0,8,16,24)).map(xi => xi._1 << xi._2).sum
   ).toOption

Мне удалось преобразовать большую часть этого с помощью документации агрегации MongoDB , но у меня возникли некоторые проблемы с этой частью: xi._1 << xi._2

Из моих запросов IDE;Я вижу, что this (<<) является синтетической функцией, относящейся к scala byte (, как видно здесь ), и определяется как:

Возвращает это значение со сдвигом в битахоставленный указанным числом битов, заполняя новые правые биты нулями.

Есть идеи, есть ли подобная функция для использования в командах или операторах MongoDB?Или альтернативное решение.

1 Ответ

0 голосов
/ 24 мая 2019

Я ненавижу отвечать на свой собственный вопрос - всегда лучше, если кто-то может помочь, но, к сожалению, не в этом случае, и это может сэкономить кому-то время. В конце концов я смог найти больше информации об операторах сдвига битов здесь . Я вижу, что функция << принимает два числовых типа (например, Long, Int и т. Д.) И, как предполагается, биты сдвинуты влево. Как уже упоминалось; Я пытаюсь приравнять это к реализации в MongoDB, поскольку нет эквивалентной функции. Но эта связь была эффективна в разрушении. Итак:

    a << b = a * 2^b

И с использованием MongoDB операторов (как изначально предполагалось) это будет:

    $multiply: [a, { $pow: [2, b]}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...