У меня есть документы, которые содержат большие объемы данных, которые мне не нужны для определенного запроса на странице, и я хочу ускорить запрос. Когда я выполняю следующий запрос из оболочки Монго:
db.hosts.find({},{dmiSystem: 1, networkInterfaces: 1, lanPrint: 1, pduPorts: 1})"
Оболочка Монго возвращает поля, которые я запрашиваю, почти мгновенно. Когда я выполняю этот же запрос из PHP с использованием MongoDB \ Client, это занимает около 5 секунд, столько же времени, сколько если бы я просто запустил find () без каких-либо параметров. Есть идеи? Мой код:
$client = new MongoDB\Client("mongodb://localhost:27017");
$collection = $client->selectCollection("consoleServer", "hosts");
$rows = $collection->find(array(),array("_id" => 1, "dmiSystem" => 1,
"networkInterfaces" => 1, "lanPrint" => 1,
"pduPorts" => 1));
return $rows;
Новая библиотека MongoDB для PHP использует другой синтаксис запросов, который выглядит более похожим на Mongo Shell, используя переменную проекции.
Исходя из вашего примера, вы сможете использовать что-то вроде этого:
$rows = $collection->find(
array(),
'projection' => array(
array(
"_id" => 1,
"dmiSystem" => 1,
"networkInterfaces" => 1,
"lanPrint" => 1,
"pduPorts" => 1)
)
);
Более подробная информация доступна в Mongodb документы.
Пытаться $rows = $collection->find(array(),
array("projection" => array("_id" => 1, dmiSystem" => 1, "networkInterfaces" => 1, "lanPrint" => 1, "pduPorts" => 1)));