_idインデックスを削除して別のインデックスに置き換えながら、_idフィールドを設定している理由がわかりません。
- どうやら、 ( documentation ) クラスから
_idメソッドを拡張することにより、必要に応じてコレクションの を無効にすることができます。もちろん、ドライバーによって が自動的に挿入されないようにする必要もあります (多くのドライバーがこれに対応しているため、一部の人にとっては、これは依然として問題になります)。createCollectionDbClientWithCommands_id
- 現在のドライバー メソッド
ensureIndexには、background指定できるパラメーターがあります (ドキュメント) 。
- プログラムでパディングを制御する方法を知りません。コレクションの時間の経過とともに MongoDB によって自動的に決定されます。ドキュメントを変更していない場合は、ほぼ 1 になると予想されます (パディングがないことを意味します)。統計を確認してください。
_idを使用せずにコレクションをautoIndexId作成するには、新しい関数を作成する必要があります。組み込み関数が現在行っているように、上記のコードをコピーして次のようにする必要があります。
bool MyClass::createCollection(const string &ns, long long size,
bool capped, int max, bool disableAutoIndexId, BSONObj *info) {
verify(!capped||size);
BSONObj o;
if ( info == 0 ) info = &o;
BSONObjBuilder b;
string db = nsToDatabase(ns);
b.append("create", ns.c_str() + db.length() + 1);
if ( size ) b.append("size", size);
if ( capped ) b.append("capped", true);
if ( max ) b.append("max", max);
if ( disableAutoIndexId ) b.append("autoIndexId", false);
return runCommand(db.c_str(), b.done(), *info);
}