0

mongodb は比較演算子と _ids の並べ替えをどのように適用しますか? _idのタイムスタンプ部分でそれを行いますか? また、objectId がクライアントまたはサーバーで生成された場合、違いはありますか?

もしそうなら、ページングは​​このフィールドで信頼できますか? 例えば_id: { $gte: last_idOnPage }

4

2 に答える 2

2

タイムスタンプはBSON::ObjectId値の最初の部分です。したがって、基本的にはい、最初にタイムスタンプでソートし、次に他の部分でソートします。

于 2013-10-31T06:55:35.543 に答える
1

ObjectId()に関するドキュメントを見ると、_id が 12 バイトの数値を表す 16 進数の文字列であることがわかります。

  • Unix エポックからの秒数を表す 4 バイトの値。
  • 3 バイトのマシン ID、
  • 2 バイトのプロセス ID、および
  • ランダムな値で始まる 3 バイトのカウンター。

したがって、部分的には正しいです。タイムスタンプを使用して値を並べ替えることもできます。しかし、他の部品も使用されます。この文字列は数値を表すため、mongo は単に数値を比較してどちらが大きいかを見つけます。

あなたの2番目の質問について(アプリケーション層またはデータベースによって生成された_idに違いはありますか):違いはありません。Mongo はまだ数値のみを比較します。

于 2013-10-31T08:45:41.037 に答える