Я использую синтаксис «heredoc», о котором упоминает Дэвид Янг. Но есть улов:
#!/usr/bin/sh
mongo <db> <<EOF
db.<collection>.find({
fieldName: { $exists: true }
})
.forEach( printjson );
EOF
Вышеуказанное НЕ будет работать, потому что фраза «$ существует» будет видна оболочкой и заменена значением переменной среды с именем «существует». Который, вероятно, не существует, поэтому после расширения оболочки он становится:
#!/usr/bin/sh
mongo <db> <<EOF
db.<collection>.find({
fieldName: { : true }
})
.forEach( printjson );
EOF
. Чтобы пройти через него, у вас есть два варианта. Один уродлив, один довольно приятный. Во-первых, уродливый: избегайте знака $:
#!/usr/bin/sh
mongo <db> <<EOF
db.<collection>.find({
fieldName: { \$exists: true }
})
.forEach( printjson );
EOF
Я НЕ рекомендую это, потому что легко забыть сбежать.
Другой вариант - избежать EOF, вот так:
#!/usr/bin/sh
mongo <db> <<\EOF
db.<collection>.find({
fieldName: { $exists: true }
})
.forEach( printjson );
EOF
Теперь вы можете поместить все ваши долларовые знаки в свой heredoc, а знаки доллара игнорируются. Нижняя сторона: это не работает, если вам нужно поместить параметры / переменные оболочки в свой скрипт монго.
Еще один вариант, с которым вы можете играть, - это возиться со своим shebang. Например,
#!/bin/env mongo
<some mongo stuff>
Существует несколько проблем с этим решением:
Я попытался добавить имя базы данных в shebang, что, по вашему мнению, будет работать. К сожалению, система обрабатывает строку shebang, все после первого пробела передается в качестве единственного параметра (как если бы он цитируется) команде env, а env не находит и не запускает его.
Вместо этого вам нужно встроить изменение базы данных внутри самого скрипта, например:
#!/bin/env mongo
db = db.getSiblingDB('<db>');
<your script>
Как и в любом случае в жизни, «существует несколько способов сделать это ! "
Технически YAML является расширенным набором JSON. Это означает, что, по крайней мере теоретически, синтаксический анализатор YAML может понимать JSON, но не обязательно наоборот.
См. Официальные спецификации в разделе, озаглавленном «YAML: отношение к JSON» .
В целом, есть некоторые вещи, которые мне нравятся в YAML, которые недоступны в JSON.
На практике ни один из этих двух последних пунктов, скорее всего, не будет иметь значения для вещей, которые вы или я делаем, но в долгосрочной перспективе я думаю, что YAML будет более надежным и жизнеспособным форматом сериализации данных.
Прямо сейчас AJAX и другие веб-технологии обычно используют JSON. YAML в настоящее время больше используется для автономных процессов обработки данных. Например, он по умолчанию включен в пакет компьютерного зрения OpenCV на основе C, а JSON - нет.
Вы найдете библиотеки C как для JSON, так и для YAML. Библиотеки YAML, как правило, новее, но раньше у меня не было с ними проблем. См., Например, Yaml-cpp .
На практике ни один из этих двух последних пунктов, скорее всего, не будет иметь значения для вещей, которые вы или я делаем, но в долгосрочной перспективе я думаю, что YAML будет более надежным и жизнеспособным форматом сериализации данных.
Прямо сейчас AJAX и другие веб-технологии обычно используют JSON. YAML в настоящее время больше используется для автономных процессов обработки данных. Например, он по умолчанию включен в пакет компьютерного зрения OpenCV на основе C, а JSON - нет.
Вы найдете библиотеки C как для JSON, так и для YAML. Библиотеки YAML, как правило, новее, но раньше у меня не было с ними проблем. См., Например, Yaml-cpp .
На практике ни один из этих двух последних пунктов, скорее всего, не будет иметь значения для вещей, которые вы или я делаем, но в долгосрочной перспективе я думаю, что YAML будет более надежным и жизнеспособным форматом сериализации данных.
Прямо сейчас AJAX и другие веб-технологии, как правило, используют JSON. YAML в настоящее время больше используется для автономных процессов обработки данных. Например, он по умолчанию включен в пакет компьютерного зрения OpenCV на основе C, а JSON - нет.
Вы найдете библиотеки C как для JSON, так и для YAML. Библиотеки YAML, как правило, новее, но раньше у меня не было с ними проблем. См., Например, Yaml-cpp .
Например, он по умолчанию включен в пакет компьютерного зрения OpenCV на основе C, а JSON - нет.Вы найдете библиотеки C как для JSON, так и для YAML. Библиотеки YAML, как правило, новее, но раньше у меня не было с ними проблем. См., Например, Yaml-cpp .
Например, он по умолчанию включен в пакет компьютерного зрения OpenCV на основе C, а JSON - нет.Вы найдете библиотеки C как для JSON, так и для YAML. Библиотеки YAML, как правило, новее, но раньше у меня не было с ними проблем. См., Например, Yaml-cpp .
От: Arnaud Lauret Book Дизайн “The веб-API. ”:
формат данных JSON
JSON является текстовым форматом данных на основе того, как язык программирования JavaScript описывает данные, но, несмотря на его имя, абсолютно независимое от языка (см. https://www.json.org / ). Используя [1 125] JSON, Вы можете описать объекты, содержащие незаказанный пары имя/значение, и также выстраиваете или списки, содержащие заказанный значения, как показано в этом числе.
объект разграничен фигурными скобками ({}). Имя является заключенной в кавычки строкой ("имя") и является сентябрем - arated от его значения двоеточием (:). Значение может быть строкой как "значение", числом как 1,23, булевская переменная (TRUE или FALSE), пустой указатель нулевого значения, объект или массив. Массив разграничен скобками ([]), и его значения разделяются запятыми (). формат JSON легко анализируется с помощью любого языка программирования. Также относительно легко читать и записать. Это широко принято для многого использования, такого как базы данных, configura-tion файлы, и, конечно, API.
YAML
YAML (Язык разметки YAML Ain’t) является человечески-благоприятным, форматом сериализации данных. Как JSON, YAML ( http://yaml.org ) является форматом данных ключа/значения. Данные показывают сравнение двух.
Примечание следующие моменты:
нет никаких двойных кавычек (" ") вокруг имен свойства и значений в [1 129] YAML.
JSON’s структурные фигурные скобки ({}) и запятые () заменяются новыми строками и добавлением отступа в [1 131] YAML.
скобки Массива ([]) и запятые () заменяются тире (-) и новые строки в [1 132] YAML.
, В отличие от этого JSON, YAML позволяет комментарии, начинающиеся со знака "диез" (#). Относительно легко преобразовать один из тех форматов в другой. Будьте предупреждены, хотя, Вы потеряете комментарии при преобразовании документ YAML [1 136] JSON.
Я считаю, что YAML будет проще для глаз: меньше скобок, "" и т. д. Хотя вкладки в YAML раздражают ... но с ними можно повесить.
Что касается производительности / ресурсов, я бы не ожидал больших различий между двумя.
Более того, мы говорим о файлах конфигурации, и поэтому я бы не стал
If you don't need any features which YAML has and JSON doesn't, I would prefer JSON because it is very simple and is widely supported (has a lot of libraries in many languages). YAML is more complex and has less support. I don't think the parsing speed or memory use will be very much different, and maybe not a big part of your program's performance.