Base64 mongodb - [js] Ошибка: неверный base64 - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть функция, которая принимает в качестве входных данных Hex MD5 Ha sh, преобразует его в Base64 и затем выдает find для базы данных Mon go.

Строка $Base64MD5 в приведенном ниже фрагменте содержит: lxCzLiriwm0tPHW+r0wawQ==, который считается действительным Base64.

При добавлении к командной строке mongo и ее выполнении:

$Hashhit = mongo --host $connectionString --eval @'
db.Media.findOne
(
{ 'Batches.Hashes.Hash': BinData(0, '$Base64MD5') }
)
'@

Я получаю:

<MongoDBValidate>   MongoDB shell version v4.0.15 connecting to: mongodb://localhost:27018/
local?gssapiServiceName=mongodb Implicit session: session { "id" : UUID("acec5f08-d0b4-438c
-9782-bce72b585a22") } MongoDB server version: 4.0.4 2020-02-03T08:58:27.235+0000 E QUERY  

  [js] Error: invalid base64 :  @(shell eval):3:26

Это несколько озадачивает. Любые предложения приветствуются.

1 Ответ

0 голосов
/ 03 февраля 2020

Вы используете здесь строку с одинарными кавычками в командной строке mongo, что означает, что она не интерполирует переменную $Base64MD5 - она ​​буквально встраивает строку $Base64MD5 в качестве второго параметра в BinData.

Сравните этот пример с единственной кавычкой здесь-строка (@' ... '@):

PS> $aaa = "myfile.txt"
PS> x$ = notepad @'
>> $aaa
>> '@

, которая запускает блокнот и показывает ошибку Cannot find the $aaa.txt file.

против этого с двойные кавычки (@" ... "@)

PS> $aaa = "myfile.txt"
PS> x$ = notepad @"
>> $aaa
>> "@

, которые вместо этого показывают ошибку Cannot find the myfile.txt file..

Попробуйте изменить разделитель здесь-строки на двойные кавычки - то есть:

$Hashhit = mongo --host $connectionString --eval @"
db.Media.findOne
(
{ 'Batches.Hashes.Hash': BinData(0, '$Base64MD5') }
)
"@

и посмотрите, работает ли это ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...