Есть ли способ создать редкий индекс с использованием драйвера MongoDb (2.2) C ++?
Кажется, что ensureIndex
Функция не принимает этот аргумент. От MongoDb документы:
bool mongo::DBClientWithCommands::ensureIndex(
const string & ns,
BSONObj keys,
bool unique = false,
const string & name = "",
bool cache = true,
bool background = false,
int v = -1)
В этом отношении, dropDups
тоже не аргумент …
В качестве обходного пути вы можете самостоятельно построить команду сервера и добавить sparse
аргумент. Если вы будете следовать эта ссылка, вы заметите, что команда сервера состоит из построения BSONObject
и различные параметры индекса добавляются в виде полей. Это должно быть просто написать свою собственную версию ensureIndex
,
Я закончил исправление исходного кода Монго (mongo/cleint/dbclient.cpp
):
bool DBClientWithCommands::ensureIndex( const string &ns , BSONObj keys , bool unique, const string & name , bool cache, bool background, int version, bool sparse ) {
BSONObjBuilder toSave;
toSave.append( "ns" , ns );
toSave.append( "key" , keys );
string cacheKey(ns);
cacheKey += "--";
if ( name != "" ) {
toSave.append( "name" , name );
cacheKey += name;
}
else {
string nn = genIndexName( keys );
toSave.append( "name" , nn );
cacheKey += nn;
}
if( version >= 0 )
toSave.append("v", version);
if ( unique )
toSave.appendBool( "unique", unique );
if ( sparse )
toSave.appendBool( "sparse", true );
if( background )
toSave.appendBool( "background", true );
if ( _seenIndexes.count( cacheKey ) )
return 0;
if ( cache )
_seenIndexes.insert( cacheKey );
insert( Namespace( ns.c_str() ).getSisterNS( "system.indexes" ).c_str() , toSave.obj() );
return 1;
}
Вопрос должен быть решены в версии 2.3.2