sql >> データベース >  >> NoSQL >> MongoDB

phpmongodbはコレクション内のn番目のエントリを検索します

    Skip()はインデックスを効果的に使用しないため、コレクション内の任意のフィールドにインデックスを配置しても意味がありません。

    skip()したいので skip()の値の場合、n番目のドキュメント が低い(システムによって異なりますが、通常、フルコレクションスキャンで100K行未満)場合は、問題ない可能性があります。問題は、通常はそうではないということです。 Mongoは、インデックスがある場合でも、結果セット全体をスキャンしてからスキップする必要があります。これにより、クエリの内容に関係なく、完全なコレクションスキャンが発生します。

    これを頻繁かつランダムな方法で行う場合は、別のコレクションをfindAndModifyと組み合わせて増分IDを使用する方がよい場合があります。 正確なドキュメント番号を生成します(http://www.mongodb.org/display/DOCS/How+to+Make+an+Auto+Incrementing+Field)。

    ただし、これは問題を引き起こします。特に削除が発生した場合は、このIDを維持する必要があります。これを回避する1つの方法は、ドキュメントを実際に削除するのではなく、削除済みとしてマークすることです。正確なドキュメントをクエリするときは、削除とlimit()を省略します 次のように、その位置に次に近いドキュメントを取得できるようにします。

    $cur = $db->collection->find(array('ai_id' => array('$gt' => 403454), 'deleted' => 0))->limit(1);
    $cursor->next();
    $doc = $cursor->current();
    


    1. Java mongodbドライバーの_idフィールドを使用してドキュメントをクエリする方法は?

    2. MongoDB $ ltrim

    3. 起動時にresqueワーカーを自動的に作成するにはどうすればよいですか?

    4. MongoDB:入力ドキュメント変数との一致の使用