В mongo есть синтаксис командной строки, который выглядит примерно так:
db.collection.find('nested_array.some_nested_key':'some_nested_value',{'nested_array.$' => 1})
Это находит и возвращает только "nested_array (s)", которые соответствуют критериям, а не всему объекту.
Проблема в том, что я не могу найти эквивалент ". $" В драйвере php. у кого есть идеи?
Методы в PHP-скрипте MongoDB похожи на их копии оболочки mongo, поэтому проекция с помощью $ positional
оператора $ positional
также использует ассоциативные массивы для сопоставления полей с запросами MongoDB. Что-то вроде этого даст желаемый результат:
<?php
$m = new MongoClient();
$db = $m->selectDB("test");
$collection = new MongoCollection($db, "collection_name");
// search for nested array
$fruitQuery = array("nested_array.some_nested_key" => "some_nested_value");
// projection (fields to include)
$projection = array("_id" => false, "nested_array.$" => true);
$cursor = $collection->find($query, $projection);
foreach ($cursor as $doc) {
var_dump($doc);
}
?>