Вы можете сделать это с помощью $unwind
в массиве updates
, отсортировав результирующие документы с помощью date
, а затем $group
объединив их на _id
, используя отсортированный порядок.
db.servers.aggregate(
{$unwind: '$service.apps.updates'},
{$sort: {'service.apps.updates.date': 1}},
{$group: {_id: '$_id', 'updates': {$push: '$service.apps.updates'}}},
{$project: {'service.apps.updates': '$updates'}})
Вашей переменной ИМЕНИ заменяют как это:
printf "Hello, %s\n" George W. Bush
Используйте это:
#! /bin/sh
NAME="George W. Bush"
printf "Hello, %s\n" "$NAME"
существует ли определенная причина, Вы используете printf, или эхо работало бы на Вас также?
NAME="George W. Bush"
echo "Hello, "$NAME
результаты в
Hello, George W. Bush
править: Причина, которой это выполняет итерации по "Джорджу Бушу - младшему", состоит в том, потому что оболочка Bourne является разграниченным пространством. Чтобы продолжать использовать printf, необходимо поместить $NAME в двойные кавычки
printf "Hello, %s\n" "$NAME"
Путем я интерпретирую страницу справочника, это, рассматривает строку, Вы передаете его, чтобы быть аргументом; если Ваша строка имеет пробелы, она думает, что Вы передаете несколько аргументов. Я полагаю, что ColinYounger корректен путем окружения переменной кавычками, которая вынуждает оболочку интерпретировать строку как отдельный аргумент.
Альтернатива могла бы быть должна позволить printf развернуть переменную:
printf "Hello, $NAME."
Ссылки для удара, но я вполне уверен, то же содержит для sh.
Если Вы хотите, чтобы все те слова были распечатаны самостоятельно, используйте печать вместо printf
printf берет спецификацию форматирования и применяет ее к каждому аргументу, что Вы передаете в. Так как у Вас есть три аргумента {George, W., Bush}, это производит строку три раза с помощью различных аргументов.