Mongodb的gridfs一次插入数据的时候会自动创建几个索引,我们程序里面的账号没有createIndex
权限,我需要手动创建一下。结果连接到mongo服务器之后忘记执行use xxxdb
来切换数据库了,于是在admin
数据库里面创建了一个索引,结果导出一边的程序报出来很多验证问题。
Mongo的admin数据库太脆弱了,只是创建一个索引就挂了。长个教训,以后千万不要手动修改它,更不要用admin保存数据。
反思一下,这次操作失误其实爆出我平时一些不好的习惯。
首先,连接mongo应该指定目标数据。而我之前都是连接到admin,然后用use
切换到目标数据库。这样难免会忘记。
1 2 3 4 |
$ # 错误使用 $ mongo ourdomain.com/admin -u tom -p tompass $ # 正确的使用 $ mongo ourdomain.com/mydb -u tom -p tompass --authenticationDatabase admin |
第二,错误的在admin数据库执行createIndex
,返回的结果明确显示索引创建成功。
1 2 3 4 5 6 7 |
{ "createdCollectionAutomatically" : true, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1, ... } |
但是我忽略了,继续在正确的数据库创建索引。不然可以早一些发现问题。
最后,创建索引应该自动化,比如gridfs这种对md5, filename创建索引的。