0

当我尝试从 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);

但是我的 $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);         
}

非常感谢您提供的任何帮助!

4

2 回答 2

2

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

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

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

于 2010-09-22T20:39:26.907 回答
1

尝试

$collection->find(array($which_document, $which_fields))->sort(array("words.created_at" => -1));
于 2010-09-22T21:32:39.690 回答