非关系型数据库MongoDB
c++开发的高性能,文档型(document)的数据库。
在非关系型数据库中最像关系型数据库的产品
应用场景
- 博客
- 笔记
文档的数据格式
{
name:zhangsan,
age:18,
address:beijing,
love:[篮球,排球,足球]
}
MongoDB的数据格式: BSON
MongoDB安装
# 切换到安装目录
cd /usr/local/
# 下载压缩包
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.18.tgz
# 解压
tar -zxvf mongodb-linux-x86_64-4.0.18.tgz
# 创建数据库目录
mkdir -p /data/db
# 启动服务器
./bin/mongod
基本命令
-
连接服务器
./bin/mongo
-
查看所有数据库
show dbs; show databases;
-
切换数据库(如果数据库不存在,会自动创建数据库)
use 数据库名;
-
查看当前使用的数据库
db;
-
删除数据库
db.dropDatabase();
-
创建集合
db.createCollection("col");
-
删除集合
db.集合名称.drop();
-
查看集合
show tables; show collections;
-
添加文档
db.集合名称.insert({name:'张三',age:18,address:"北京"});
-
查询
# 查询所有数据 db.col.find(); # 条件查询 db.col.find({name:'张三'}); # 多条件查询 db.col.find({name:'张三',age:18});
-
删除文档
db.col.drop({name:"张三"}); db.col.deleteMany({name:"张三"}); db.col.deleteOne({name:"张三"});
-
修改
# 替换一条 db.col.update({age:18,name:'张三'},{name:'李四',address:"上海2222"}); # 修改一条 db.col.update({name:"张三",age:18},{$set:{name:'王五',address:"深圳"}}); # 修改多条 db.col.updateMany({name:"张三",age:18},{$set:{name:'王五',address:"深圳"}});
-
分页查询 limit(每页显示的条数),skip(跳过多少条数据)
# 跳过一条数据显示两条数据 db.col.find().limit(2).skip(1);
-
多列排序
#单列排序 db.col.find().sort({age:-1}); # 多列排序 db.col.find().sort({age:-1,_id:-1});
如果数据库中没有任何的数据,则该数据库是不显示的。
Mongodb远程连接IP问题
./mongo --bind_ip 0.0.0.0
java连接Mongodb
<!-- 连接参数 -->
<!-- 工厂类 -->
<bean id="databaseFactory" class="org.springframework.data.mongodb.core.SimpleMongoClientDbFactory">
<!-- 连接参数 -->
<constructor-arg value="mongodb://192.168.128.129/blog"/>
</bean>
<!-- 模板类 -->
<bean id="template" class="org.springframework.data.mongodb.core.MongoTemplate">
<!-- 通过构造创建模板类-->
<constructor-arg ref="databaseFactory"/>
</bean>
测试:
public static void main(String[] args) {
ClassPathXmlApplicationContext xmlApplicationContext = new ClassPathXmlApplicationContext("spring-mongo.xml");
MongoTemplate template = xmlApplicationContext.getBean("template", MongoTemplate.class);
User user = new User();
user.setUserId(100);
user.setName("liangdarong1");
user.setAge(182);
//向库中添加数据
// User insert = template.insert(user);
// System.out.println(insert);
//查询
// List<User> users = template.find(Query.query(Criteria
// .where("userId").is(1)
// .and("name").in("lisi")
// ),
// User.class);
// for (User user1 : users) {
// System.out.println(user1);
// }
//根据id查询
System.out.println(template.findById("5ed7e4e457de5a792b731d9e",User.class));
}