Считайте файл изображения в двоичное поле документа MongoDB с помощью сценария оболочки mongo

Я хотел бы прочитать файл изображения в двоичном поле документа MongoDB из оболочки mongo. Я могу сделать это на Java с помощью Java-драйвера MongoDB. Тем не менее, я хотел бы иметь возможность использовать скрипт монго из оболочки монго. Это возможно?

Например, я хотел бы сделать это:

D:\mongo\bin> монго --shell myscript.js

где myscript.js выглядит следующим образом:

conn = new Mongo();
db = conn.getDB("mydb");
db.mycoll.remove();
db.mycoll.insert( { name : "LCD monitor",
                    thumbnail : Binary(0, **cat("D:\\images\\lcdmonitor.jpg")**)
                  } );

Как есть, использование метода cat() дает «InternalError: буфер слишком мал (анон): 1», поскольку cat() предназначен только для чтения текстового файла.

Какой метод/функцию вместо cat() я должен использовать, чтобы это сработало? Можно ли это вообще сделать в оболочке монго?


person Roy Batty    schedule 08.06.2013    source источник


Ответы (1)


Я не знаю способа прочитать двоичный файл непосредственно из оболочки Mongo. Тем не менее, я знаю способ сделать это, если вы хотите внешне обработать файл и преобразовать его в base64. Обратите внимание, что вам все равно придется выполнить некоторое преобразование, так как вы не можете хранить необработанные двоичные данные внутри MongoDB.

В Linux я попробовал следующее и убедился, что это работает:

# Extract 1M random bytes, convert it to base64, and store it as /tmp/rrr
$ head -c 10000000 /dev/random | base64 > /tmp/r

$ mongo
> var r = cat ('/tmp/r')                # Reads into r BUT then terminates it with a NL
> var rr = r.substring (0, r.length-1)  # Remove the newline
> var p = BinData (0, rr)               # bring it into p
person Ram Rajamony    schedule 08.06.2013
comment
Спасибо, Рам. Но это не сработало бы для меня, так как это файлы изображений, которые должны храниться в поле документа MongoDB. Данные должны быть неизменными, чтобы их можно было прочитать и отобразить с помощью java-драйвера. Как я уже упоминал в своем первоначальном вопросе, я уже проверил, что могу хранить и извлекать эти файлы .jpg в/из MongoDB с помощью java. Кроме того, преобразование в base64 в Windows 7, вероятно, добавляет дополнительный шаг, который я не могу запустить в сценарии монго. - person Roy Batty; 09.06.2013
comment
Ответ не относится к заданному вопросу. - person Will; 01.05.2019