Не удается получить доступ к значениям в MongoDB с помощью курсора с помощью PHP - PullRequest
0 голосов
/ 23 сентября 2010

Кажется, у меня возникают проблемы с использованием курсора, когда я пытаюсь извлечь данные из MongoDB.Вот скриншот моей простой структуры данных:

скриншот структуры данных http://droplr.com/IpcH+

Я пытаюсь использовать следующее:

$collection_name = "users";
$collection = $this->mongo->db->$collection_name;
$which_document = array("email" => $email_address);
$which_fields = array("words");
$cursor = $collection->find($which_document, $which_fields);

Но мой курсор $кажется, не идет дальше в документ, чем фактический документ.В конце я смотрю на sort () и limit () для поля create_at внутри поля «words», но, похоже, зашел в тупик.И либо передача ошибок MongoDB не очень полезна, либо я не знаю, как правильно ее использовать.(Я бы предположил последнее.)

Одна идея: я не уверен, что таблица «слов», генерируемая в квадратных скобках, правильна, но вот код, который я использую для вставки данных здесь:

function create_word($word, $email_address){
    $collection = 'users';

// make sure word isn't null
if($word !== NULL){

// add new data to the 'words' set
    $new_data = array('$addToSet' => array('words' => array(
                                                            'word' => $word,
                                                            'status' => 'open',
                                                            'created_at' => time()
                                                            )));
    $this->mongo->db->$collection->update(array('email' => $email_address), $new_data);         
}

Большое спасибо за любую помощь, которую вы можете оказать!

Ответы [ 2 ]

2 голосов
/ 23 сентября 2010

Вы не можете сортировать вложенные документы. Вы должны сделать это на стороне клиента. В вашем случае получите массив слов:

$array = iterator_to_array($cursor); 
$words = $array[0]["words"];

, а затем используйте php для сортировки значений.

1 голос
/ 23 сентября 2010

Попробуйте

$collection->find(array($which_document, $which_fields))->sort(array("words.created_at" => -1));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...