方式1:db. 集合名 .remove({});
{}中不加条件,会直接逐条删除结合中所有数据,但是会保留索引,删除速度慢
适用于删除数据量小,且不想重建索引
如果数据量大,通过这种方式删除,可能会导致数据库堵塞,应用连接该库报timeout,此时应该:
- 停止删除语句/进程
- 手动触发主从切换
方式2: db. 集合名 .drop();
直接整个删除集合中所有数据,包括索引,删除速度快
如果再插入数据,需要 重建索引
mongoDB索引创建
testDB库,testColl表索引:
PRIMARY> db.testColl.getIndexes()
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "testDB.testColl"
},
{
"v" : 2,
"key" : {
"sendTime" : -1
},
"name" : "idx_sendTime",
"ns" : "testDB.testColl",
"background" : true
},
{
"v" : 2,
"key" : {
"fromUserId" : 1,
"sendTime" : -1,
"msgType" : 1
},
"name" : "idx_fromUserId_sendTime_msgType",
"ns" : "testDB.testColl",
"background" : true
},
{
"v" : 2,
"key" : {
"fromUserId" : 1,
"sendTime" : -1,
"groupType" : 1
},
"name" : "idx_fromUserId_sendTime_groupType",
"ns" : "testDB.testColl",
"background" : true
},
{
"v" : 2,
"key" : {
"groupId" : 1
},
"name" : "idx_groupId",
"ns" : "testDB.testColl",
"background" : true
}
]
转换为创建语句:
> use testDB
db.testColl.ensureIndex({"_id" : 1},{"background" : true}) // 默认就有,不需要手动创建
db.testColl.ensureIndex({"sendTime" : -1},{"background" : true})
db.testColl.ensureIndex({"fromUserId" : 1,"sendTime" : -1,"msgType" : 1},{"background" : true})
db.testColl.ensureIndex({"fromUserId" : 1,"sendTime" : -1,"groupType" : 1},{"background" : true})
db.testColl.ensureIndex({"groupId" : 1},{"background" : true})
参考
MongoDB 教程
https://www.jc2182.com/mongodb/mongodb-jiaocheng.html