MongoDB::commandВыполняет команду базы данных
&reftitle.description;
publicarrayMongoDB::commandarraycommandarrayoptionsarray()stringhash
Почти все, что не является операцией CRUD, может быть выполнено с помощью команды
базы данных. Нужно узнать версию базы данных? Для этого есть команда.
Нужно сделать агрегацию? Для этого есть команда. Нужно включить
запись событий? Вы поняли идею.
Этот метод идентичен:
selectCollection('$cmd')->findOne($data);
}
?>
]]>
&reftitle.parameters;
command
Запрос на отправку.
options
Массив опций для создания индекса. В настоящее время доступны следующие
варианты:
&mongo.writes.parameters.sockettimeoutms;
Следующие параметры устарели и больше не должны использоваться:
&mongo.writes.parameters.timeout;
hash
Установите хеш подключения сервера, который выполнил команду. Когда
результат команды подходит для создания
MongoCommandCursor, хеш предназначен для
передачи в MongoCommandCursor::createFromDocument.
Хеш также будет соответствовать соединению, возвращенному из
MongoClient::getConnections.
&reftitle.changelog;
&Version;&Description;PECL mongo 1.5.0
Переименована опция "timeout" в
"socketTimeoutMS". Выдает
E_DEPRECATED при использовании
"timeout".
Добавлен параметр ссылки на hash.
PECL mongo 1.2.0
Добавлен параметр options с одним вариантом:
"timeout".
&reftitle.returnvalues;
Возвращает ответ базы данных. Каждый ответ базы данных всегда является максимум одним
документом, что означает, что результат команды базы данных никогда не может
превышать 16 Мб. Структура результирующего документа зависит от команды, но
большинство результатов будет иметь поле ok, указывающее успех
или неудачу, и results, содержащие массив каждого из
результирующих документов.
&reftitle.examples;
Пример использования MongoDB::command "distinct"
Поиск всех различных значений для ключа.
people;
$people->insert(array("name" => "Joe", "age" => 4));
$people->insert(array("name" => "Sally", "age" => 22));
$people->insert(array("name" => "Dave", "age" => 22));
$people->insert(array("name" => "Molly", "age" => 87));
$ages = $db->command(array("distinct" => "people", "key" => "age"));
foreach ($ages['values'] as $age) {
echo "$age\n";
}
?>
]]>
&example.outputs.similar;
4
22
87
Пример использования MongoDB::command "distinct"
Поиск всех различных значений для ключа, где значение больше
или равно 18.
people;
$people->insert(array("name" => "Joe", "age" => 4));
$people->insert(array("name" => "Sally", "age" => 22));
$people->insert(array("name" => "Dave", "age" => 22));
$people->insert(array("name" => "Molly", "age" => 87));
$ages = $db->command(
array(
"distinct" => "people",
"key" => "age",
"query" => array("age" => array('$gte' => 18))
)
);
foreach ($ages['values'] as $age) {
echo "$age\n";
}
?>
]]>
&example.outputs.similar;
22
87
Пример использования MongoDB::command MapReduce
Получение всех пользователей, у которых есть хотя бы одно событие "sale", и сколько раз
каждый из этих пользователей совершил распродажу.
insert(array("user_id" => $id,
"type" => $type,
"time" => new MongoDate(),
"desc" => $description));
// конструктор карты и reduce функции
$map = new MongoCode("function() { emit(this.user_id,1); }");
$reduce = new MongoCode("function(k, vals) { ".
"var sum = 0;".
"for (var i in vals) {".
"sum += vals[i];".
"}".
"return sum; }");
$sales = $db->command(array(
"mapreduce" => "events",
"map" => $map,
"reduce" => $reduce,
"query" => array("type" => "sale"),
"out" => array("merge" => "eventCounts")));
$users = $db->selectCollection($sales['result'])->find();
foreach ($users as $user) {
echo "{$user['_id']} принял участие в {$user['value']} распродажах.\n";
}
?>
]]>
&example.outputs.similar;
User 47cc67093475061e3d9536d2 принял участие в 3 распродажах.
User 49902cde5162504500b45c2c принял участие в 14 распродажах.
User 4af467e4fd543cce7b0ea8e2 принял участие в 1 распродажах.
Использование MongoCode
В этом примере используется MongoCode, который также может
принимать аргумент scope. Однако в настоящее время MongoDB не поддерживает использование
scope в MapReduce. Если вы хотите использовать переменные на стороне клиента в
функциях MapReduce, вы можете добавить их в глобальную область, используя
необязательное поле scope с командой базы данных. Смотрите
документацию MapReduce
для получения дополнительной информации.
Аргумент out
До 1.8.0 аргумент out был необязательным. Если вы его
не используете, результаты MapReduce будут записаны во временную коллекцию,
которая будет удалена при закрытии вашего соединения. В 1.8.0+ требуется аргумент
out. Смотрите
документацию MapReduce
для получения дополнительной информации.
Пример использования MongoDB::command "geoNear"
В этом примере показано, как использовать команду geoNear.
demo;
$c = $d->poiConcat;
$r = $d->command(array(
'geoNear' => "poiConcat", // Поиск в коллекции poiConcat
'near' => array(-0.08, 51.48), // Поиск около 51.48° с.ш., 0.08° в.д.
'spherical' => true, // Включение сферический поиск
'num' => 5, // Максимум 5 возвращенных документов
));
print_r($r);
?>
]]>
&reftitle.seealso;
MongoCollection::aggregateMongoCollection::findAndModifyMongoCollection::group
Основная документация MongoDB по
командам базы данных.