当我尝试从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);
}
非常感谢您提供任何帮助!
答案 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));