46

私は分析システムを作成しています。API 呼び出しは一意のユーザー ID を提供しますが、順序が正しくなく、まばらすぎます。

bitarray/bitset 内の分析データポイントをマークするために、各 Unique User ID に自動インクリメント ID を与える必要があります。したがって、最初に遭遇したユーザーは bitarray の最初のビットに対応し、2 番目のユーザーは bitarray の 2 番目のビットに対応する、というようになります。

MongoDB でインクリメンタルな一意のユーザー ID を生成する確実で迅速な方法はありますか?

4

8 に答える 8

32

選択した回答にあるように、findAndModify を使用してシーケンシャル ID を生成できます。

しかし、そうすべきではないという意見には強く反対します。それはすべて、ビジネス ニーズによって異なります。12 バイトの ID を使用すると、リソースを大量に消費する可能性があり、将来的に重大なスケーラビリティの問題が発生する可能性があります。

ここに詳細な回答があります。

于 2013-01-21T06:11:15.520 に答える
28

できますが、すべきではありませ

mongo の各オブジェクトには既に ID があり、挿入順に並べ替えることができます。ユーザー オブジェクトのコレクションを取得し、それを繰り返し、これをインクリメントされた ID として使用することの何が問題になっていますか? 完全に map-reduce ジョブのようなものに行きます

于 2011-12-05T10:47:55.563 に答える
0

最初のレコードを追加する必要があります

"_id" = 1    in your db

$database = "demo";
$collections ="democollaction";
echo getnextid($database,$collections);

function getnextid($database,$collections){

     $m = new MongoClient();
    $db = $m->selectDB($database);
    $cursor = $collection->find()->sort(array("_id" => -1))->limit(1);
    $array = iterator_to_array($cursor);

    foreach($array as $value){



        return $value["_id"] + 1;

    }
 }
于 2019-01-03T08:12:10.357 に答える