我们使用mongo-index-exporter
转储了索引的定义,并尝试在每次应用程序启动时应用它们,以便通过执行来实现可重现的环境
mongo --verbose "mongodb://$MONGO_DB_USER:$MONGO_DB_PASSWORD@$MONGO_DB_HOST/$MONGO_DB_NAME?authSource=$MONGO_AUTH_SOURCE&authMode=scram-sha1" indexes.js
在这样的文件上:
print('Using db ' + db)
setVerboseShell(true)
print('Creating indexes on mycoll1')
db.mycoll1.createIndex({"_id":1}, {"name":"_id_", "background": true});
db.mycoll1.createIndex({"createdAt":1,"field1.field2.field3":1}, {"name":"coll1_field123_idx"});
print('Creating indexes on mycoll2')
db.mycoll2.createIndex({"_id":1}, {"name":"_id_", "background": true});
db.mycoll2.createIndex({"createdAt":1,"field1.field2.field3":1}, {"name":"coll1_field123_idx"});
要在具有五个节点的copyset上创建索引,我们正在执行 以下命令:
mongo --verbose "mongodb://$MONGO_DB_USER:$MONGO_DB_PASSWORD@$MONGO_DB_HOST/$MONGO_DB_NAME?authSource=$MONGO_AUTH_SOURCE&authMode=scram-sha1" indexes.js
这对我们在QA中工作正常,因为MONGO_DB_HOST是一个单节点,并且我们使用的是新的空数据库,而在生产环境中无法使用,因为另外数据库已经存在(并且集合包含内容)。
其他相关信息:
复制粘贴到服务器工作的mongo shell内的命令会立即终止,并导致以下输出
{ “ createdCollectionAutomatically”:否, “ numIndexesBefore”:11 “ numIndexesAfter”:11 “ note”:“所有索引已经存在”, “好”:1 }