使用PHP无法使用游标访问MongoDB中的值

时间:2010-09-22 20:21:04

标签: php mongodb mongodb-php

当我尝试从MongoDB中提取数据时,我似乎在使用游标方面遇到了一些麻烦。以下是我简单数据结构的屏幕截图:

data structure screenshot 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);

但我的$ cursor似乎没有进一步进入文档而不是实际文档。最后,我想在“words”字段中的created_at字段上查找sort()和limit(),但我似乎陷入了僵局。并且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 个答案:

答案 0 :(得分:2)

您无法对子文档进行排序。您需要在客户端进行此操作。在您的情况下,检索单词数组:

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

然后使用php对值进行排序。

答案 1 :(得分:1)

尝试

$collection->find(array($which_document, $which_fields))->sort(array("words.created_at" => -1));