前言
不支持用JDBC操作
除了通过启动 MongoDB进程进如 Shell 环境访问数据库外,MongoDB 还提供了其他基于编程语言的访问数据库方法。
MongoDB 官方提供了 Java 语言的驱动包,利用这些驱动包可使用多种编程方法来连接并操作 MongoDB 数据库。
MongoDB安装
添加配置文件
1 | vi /etc/yum.repos.d/mongodb-org-4.0.repo |
内容如下
1 | [mngodb-org] |
安装
1 | yum -y install mongodb-org |
启动
1 | service mongod restart |
开机启动
1 | chkconfig mongod on |
查看数据文件位置
1 | vi /etc/mongod.conf |
允许远程连接
1 | net: |
修改为
1 | net: |
重启
1 | service mongod restart |
Shell 下测试
当你进入mongoDB后台后,它默认会链接到 test 文档(数据库):
1 | > mongo |
由于它是一个JavaScript shell,您可以运行一些简单的算术运算:
1 | > 2 + 2 |
db 命令用于查看当前操作的文档(数据库):
1 | > db |
库操作
1 | # 查看当前服务器上的数据库 |
创建数据库
1 | # 创建数据库 |
集合/表操作
1 | # 查看当前数据库中的集合 |
数据插入
insert() 方法
注意:db.collection中,collection为你要操作的集合的名称
1 | db.collection.insert( |
insertOne() 方法
添加一条文档记录
1 | db.collection.insertOne( |
insertMany() 方法
添加多条文档记录 ([]方括号表示数组)
1 | db.collection.insertMany( |
示例
1 | db.zdb_user_new.insert({"name":"xiao ming", "age":12}); |
数据查询
字符串查询
1 | db.zdb_user_new.find(); |
数值查询
操作 | 操作符 | 范例 | SQL的类似语句 |
---|---|---|---|
等于 | : |
db.zdb_user_new.find({"age":10}) |
where age = 10 |
小于 less than | $lt: |
db.zdb_user_new.find({"age":{$lt:15}}) |
where age < 15 |
小于或等于less than / equal | $lte: |
db.zdb_user_new.find({"age":{$lte:15}}) |
where age <= 15 |
大于greater than | $gt: |
db.zdb_user_new.find({"age":{$gt:15}}) |
where age > 15 |
大于或等于greater than / equal | $gte: |
db.zdb_user_new.find({"age":{$gte:15}}) |
where age >= 15 |
不等于 not equal | $ne: |
db.zdb_user_new.find({"age":{$ne:15}}) |
where age != 15 |
逻辑操作符and、or/in、not、exists
exists
1 | // 文档中包含name属性的结果 |
or
1 | db.zdb_user_new.find({$or:[{"age":18},{"name":"xiao ming"}]}); |
in
1 | db.zdb_user_new.find({"age":{$in:[12,18]}}); |
count统计
1 | db.zdb_user_new.count(); |
distinct不重复的值
语法
1 | db.zdb_user_new.distinct(取值字段,查询条件) |
示例:
返回满足条件字段的结果数组
第一个参数必须是字符串
1 | db.zdb_user_new.distinct("name",{"age":{$in:[12,18]}}); |
结果
1 | [ "xiao hong", "xiao ming" ] |
用户
如出现找不到MongoDB shell为可执行文件,位于MongoDB安装路径下的/bin文件夹中。
用户设置
1 | use admin; |
2、设置完成,可以输入 show users
查看是否设置成功—超级管理员需要先登录才可以查看
1 | show users |
3、开启验证
找到 MongoDB 安装目录,打开 mongod.cfg文件,
1 | vi /etc/mongod.conf |
找到以下这句:
1 | #security: |
修改为:
1 | security: |
重启就可以了。
1 | service mongod restart |
4、当设置账号密码成功后,我们对mongodb的数据库操作都有了限制,这时需要我们输入账号密码登录。
1 | // 方式一 |
添加其他数据库用户
我们除了可以设置数据库的超级管理员以外,还可以给每个数据库设置单独的管理员。其只有操作单独数据的一定权限。
1 | use zdb; // 跳转到需要添加用户的数据库 |
查看用户
1 | use zdb; |
登录
方式1
1 | mongo |
方式2
1 | mongo zdb -u psvmc -p 123456 |
常用命令
1 | use zdb; |
添加依赖
不支持用JDBC操作
1 | <dependency> |
Java操作
连接
注意这两种方式对应的MongoClient
在不同的包下。
另外认证库和连接的数据库可以不一样。
方式1
1 | import com.google.common.collect.Lists; |
方式2
1 | import com.mongodb.MongoClient; |
查询
1 | import com.google.common.collect.Lists; |
设置每批数量
设置每批数量并不会影响查询的结果。
假如数据是100条,我们如果设置每批是10条,依旧在for循环中能查询到100条记录。
batchSize()
方法可用于限制每次查询返回的文档数量,从而提高查询性能和减少内存使用。
然而,需要注意的是,在某些情况下,使用 batchSize()
方法可能会导致查询性能下降,因此需要根据具体情况进行选择。
1 | FindIterable<Document> documents = mongoCollection.find().batchSize(1000); |
插入数据
1 | import com.google.common.collect.Lists; |
其他
1 | // 插入单条/多条方法 |
取值
默认方式
1 | document.getString(name); |
但是不推荐这样使用,原因是通过上面的方法获取的时候要求数据格式必须和获取的格式完全一样才行。
比如自动生成的主键_id
,我们觉得它是字符串,使用getString
获取,但是这样获取就报错了。
得使用下面的方式获取
1 | document.getObjectId("_id").toString(); |
推荐方式
1 | String strV = document.get(name).toString(); |
要取Long值的话,建议使用
1 | (long) Double.parseDouble(document.get(name).toString()); |
原因是如果值是浮点的话使用Long.parseLong()
也会报错
Double
1 | Double.parseDouble(document.get(name).toString()); |