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 のエラー パッシングはあまり役に立たないか、適切に使用する方法がわかりません。(私は後者を想定しています。)

1 つのアイデア: 角かっこ内で生成される「単語」テーブルが正しいかどうかはわかりませんが、ここにデータを挿入するために使用しているコードを次に示します。

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 に答える