0

私はマングーススキーマで遊んでいます。3 つのアイテムがあり、それぞれに次のような対応する ID フィールドがあります。

"_id": "508dcb79cb1c8ad910000001","
"_id": "508dcba389e2f32e11000002","
"_id": "508dcba389e2f32e11000003","

ID に対応する最後の番号を取得するためにカスタム ID の番号を設定することなく、ID の大きなチャンクを処理してよりクリーンな ID を取得するデフォルトの方法はありますか? または、正規表現などを使用して、次のように ID で取得できるようにする必要があります。

app.get('/fields/:id', function(req, res) { ; });

/field/1などでアクセスします/field/3

4

1 に答える 1

2

hereで説明されているように、ドキュメントの ObjectID は、タイムスタンプ、マシン ID、プロセス ID、およびカウンターで構成されます。カウンター自体を取得して ObjectID を取得する方法がわかりません。正規表現を使用してインデックスを検索することは、インデックス内のすべての ObjectID を反復処理することになるため、おそらくお勧めできません。hereで指摘されているように、単純なプレフィックスの正規表現のみがインデックスを利用できます。さらに、複数のドキュメントが同じカウンターを持つ可能性があると思います。たとえば、2 つの異なるマシンで同じコレクションへの書き込みが発生した場合などです。

したがって、短い答えは「いいえ」です。本当に短い ID が必要な場合は、独自のシーケンス番号をロールするか、 shortidのようなものを使用するか、電子メール、ユーザー名などの自然に一意のインデックス (コレクションにたまたまインデックスがある場合) でドキュメントを検索する必要があります。

于 2012-10-29T02:38:37.967 に答える