MongoDb создает разреженный индекс с помощью драйвера c ++

Есть ли способ создать редкий индекс с использованием драйвера 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)

2

Решение

В этом отношении, dropDups тоже не аргумент …

В качестве обходного пути вы можете самостоятельно построить команду сервера и добавить sparse аргумент. Если вы будете следовать эта ссылка, вы заметите, что команда сервера состоит из построения BSONObject и различные параметры индекса добавляются в виде полей. Это должно быть просто написать свою собственную версию ensureIndex,

2

Другие решения

Я закончил исправление исходного кода Монго (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

0

По вопросам рекламы [email protected]