mongodb的坑

本文分享了在实际项目中使用MongoDB集群的经验教训,包括常用操作命令、解决分页查询报错的方法及如何优化排序性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实际项目中,mongodb踩得坑

背景:
最近项目中项目中用到mongodb集群,以前用过redis,第一次用mongodb,开始的想法是都是nosql,应该差不多,但是真正用的时候才发现,都是nosql,坑不一样的蹲法。这里记录一下遇到的一些问题。后续再有遇到,继续完善。
  • 常用的mongodb操作语句
  • spring+mongodb分页查询报错

1、常用的mongodb操作语句

  • 登陆:mongo –port 27017
  • 显示DB:show dbs
  • 进入某DB:use test_cswuyg
  • 删除表:db.表名.drop()
  • 先进入,再删除db库:db.dropDatabase()
  • 显示集合:show tables
  • 查看collections:show collections

  • 从指定的机器上复制指定数据库数据到某个数据库:db.copyDatabase(“mydb”, “temp”, “127.0.0.1”);将本机的mydb的数据复制到temp数据库中

  • 导出数据:./bin/mongoexport -d test -c students -o students.json
    参数说明:

    • h:指明数据库宿主机的IP
    • u:指明数据库的用户名
    • p:指明数据库的密码
    • d:指明数据库的名字
    • c:指明collection的名字
    • f:指明要导出那些列
    • o:指明到要导出的文件名
    • q:指明导出数据的过滤条件

2、spring+mongodb分页查询报错

先贴出来报的错(太多了,只帖最重要的):

Caused by: com.mongodb.MongoException: Runner error: Overflow sort stage buffered data usage of 33558005 bytes exceeds internal limit of 33554432 bytes

意思很明显:排序时,内存不够了。原因:mongodb分页查询的时候,先将数据在内存中排个序,排好序之后再根据skip,limit查询。所以数据量大了,排序占用的内存就多了(其实我的数据也不大,1G左右)。

亲测解决方案:给排序字段加索引。

加索引写法:

//在字段age 上创建索引,1(升序);-1(降序),这里两种写法,应该都可以。建表时创建;
db.你的collection.createIndex({"你的字段": -1})
如:db.users.ensureIndex({age:1}) 
//已存在大量数据,后台执行创建,backgroud设为true即可
db.t3.ensureIndex({age:1} , {backgroud:true})

查看索引:

db.你的collecton.getIndexes();

删除索引:

//删除你的collecton中的所有索引
db.你的collecton.dropIndexes()
//删除你的collecton中的firstname 索引
db.你的collecton.dropIndex({name: 1})

后续遇到再补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值