Отфильтруйте поля курсора Монго до нужного индекса массива с помощью PHP - PullRequest
1 голос
/ 03 февраля 2012

В процессе обучения пользовался Mongo и PHP, и застрял с этим. У меня есть коллекция в Монго со следующей структурой:

array(3){
["timehack"]=>int(..),  
["_id"]=>object..,  
["series"]=>  
array(3){  
    [0]=>int(..),  
    [1]=>int(..),  
    [2]=>int(..)  
}  
}  

Я пытаюсь запросить коллекцию, чтобы получить все образцы с первым элементом в «серии», что-то вроде:

$cursor = $collection->find();
$cursor->fields(array=>("timehack"=>true, "_id"=>false, "series.0"=>true));
$arr = $cursor->getNext();
var_dump($arr);

Полученный массив серий пуст. Как я могу получить только нужный индекс? (Я понимаю, что могу получить все образцы в серии, а затем отфильтровать их по коду, но я хотел бы знать, как выполнить это с помощью запроса). Спасибо.

1 Ответ

0 голосов
/ 25 февраля 2012

В комментариях выше вы уже подтвердили, что это работает с оператором $ slice в оболочке. Итак, чтобы дать вам пример того, как $ slice работает в PHP, я отсылаю вас только к тестам PHP в самом драйвере.

Посмотрите на строку 33 в файле tests / MongoCollectionTest2.php на github:

https://github.com/mongodb/mongo-php-driver/blob/master/tests/MongoCollectionTest2.php

Код выглядит так:

$m = new Mongo();
$db = new MongoDB($m, "phpunit");
$this->object = $db->selectCollection('c');
...
...
$results = $this->object->find(array(),array("x" => array('$slice' => 3)))->getNext();

Это выглядит немного запутанным по сравнению с оболочкой, в которой много объектов используется (если я правильно понял), но, надеюсь, достаточно, чтобы вы начали:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...