简单的mongodb的学习使用,勿喷,有问题点出
什么是MongoDB ?
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统,无事务,数据安全回滚无法保证。
mongoDB的数据(文档)没有规范现在,可以随便插入
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
mongodb 存储的是json数据(bson:二进制json)
mongodb的结构:
mongodb服务(数据库(database):仓库(集合(collection):数组存放(文档(document):最小单位,我们就是操作文档)))
在mongodb中我们不用自己手动创建数据库和集合,当我们创建文档时,如果文档所在集合和数据库不存在,它会自动创建集合和数据库。
mongodb加入数据时会自己创建一个唯一标识id
安装mongodb
http://dl.mongodb.org/dl/win32/x86_64 网站下载
解压可以直接使用
先创建数据库文件的存放位置
在MongoDB下创建data,在data下再创建db:D:\software\MongoDB\data\db
因为启动mongodb服务之前需要必须创建数据库文件的存放文件夹,否则命令不会自动创建,而且不能启动成功。
启动MongoDB服务
1.打开cmd命令行
2.进入D:\software\MongoDB\bin目录(注意:先输入d:进入d盘,然后输入cd D:\software\MongoDB\bin)
3.输入如下的命令启动mongodb服务:mongod --dbpath D:\software\MongoDB\data\db
在浏览器输入http://localhost:27017 (27017是mongodb的端口号)查看,若显示
则表示,连接成功。如果不成功,可以查看端口是否被占用。
但是在本地windows“服务”中,是没有配置上mongodb 服务的,可以打开“服务”看下
配置本地windows mongodb 服务
这样可设置为 开机自启动,可直接手动启动关闭,可通过命令行net start MongoDB 启动。该配置会大大方便。
1.先在data文件下创建一个新文件夹log(用来存放日志文件)
2.在Mongodb新建配置文件mongo.config
可能很多人都不会创建.config配置文件。那给大家介绍下简单的方法:
先创建一个mongo.txt文件,再打开,点击”另存为“,将底下的文件类型更改为”全部类型“,并更改文件名称为mongo.config。
这样就可以创建一个config的配置文件了。
3.用记事本打开*mongo.config* ,并输入:
dbpath=D:\software\MongoDB\data\db
logpath=D:\software\MongoDB\data\log\mongo.log
4.用管理员身份打开cmd:
可能还有很多人不会管理员身份打开cmd。这也介绍下:
在下图路径下找到cmd 的运行文件
然后右键,以管理员身份运行。打开后发现在顶端比普通打开的多了”管理员“三个字
5.配置windows服务:
cmd先跳转到 D:\software\MongoDB\bin目录下。
输入:mongod --config “D:\software\Mongodb\mongo.config” --install --serviceName “MongoDB”
即根据刚创建的mongo.config配置文件安装服务,名称为MongoDB。
完成后,再次查看本地的服务。
如果成功的话,会发现本地服务多了”MongoDB"服务。
这就大功告成了。哈哈~~~
可以通过:“开机自启动,可直接手动启动关闭,命令行net start MongoDB 启动”。
开启后,可以正常连接了。可以用pycharm等IDE连接,
配置环境变量
把文件路径 E:\mongodb64\mongodb\bin 添加到系统变量中 path中(添加了环境变量就可以控制台中使用命令使用了)
MongoRepository有以下方法
count()统计总数
count(Example< S > example)条件统计总数
delete(T entities)通过对象信息删除某条数据
deleteById(ID id)通过id删除某条数据
deleteALL(Iterable<? extends T> entities)批量删除某条数据
deleteAll() 清空表中所有的数据
existsById(ID id) 判断数据是否存在
exists(Example< T > example) 判断某特定数据是否存在
findAll() 获取表中所有的数据
findAll(Sort sort) 获取表中所有的数据,按照某特定字段排序
findAll(Pageable pageAble) 获取表中所有的数据,分页查询
findAll(Example< T > example) 条件查询
findAll(Iterable ids) 条件查询
findAll(Example< T > example,Pageable pageable) 条件分页查询
findAll(Example< T > example,Sort sort) 条件查询排序
findOneById(ID id) 通过id查询一条数据
findOne(Example example) 通过条件查询一条数据
insert(S entities) 插入一条数据
insert(Iterable< T > entities) 插入多条数据
save(S entities) 保存一条数据
saveAll(Iterable< T > entities)
save(Iterable< T > iterable) 加入多条数据
MongOdb基本命令:
ObjectId() mongodb自己创建的唯一标识id的命令
可以通过 -id 来自己设置唯一id(不推荐)
示例:db.stus.insert({_id:18,name:“chenpeng”,age:18,gender:“男”})
数据库操作
show databases: 显示当前全部数据库
use 数据库名称: 进入指定的数据库
db: 显示当前所在位置数据库名称
show collections 显示数据库中的所有集合
db.collection.drop() 删除本集合
db.dropDatabase() 删除本数据库
数据库的crud操作:
添加:
插入一个文 档:db.集合名称.insert(对象json)
示例:db.stus.insert({name:“chenpeng”,age:18,gender:“男”})
多条插入:db.集合名称.insert([{对象json},{对象json},{对象json}])
示例:db.stus.insert([{name:“chenpeng”,age:18,gender:“男”},{name:“chenpeng”,age:18,gender:“男”}, {name:“chenpeng”,age:18,gender:“男”}])
插入一条:db.集合名称.insertOne()
插入多个(默认数组):db.集合名称.insertMany()
查询
条件标签:
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法 db.col.find().pretty()
MongoDB AND 条件 db.col.find({key1:value1, key2:value2}).pretty()
MongoDB 与 RDBMS Where 语句比较
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于 |
{: } |
db.col.find({"by":"菜鸟教程"}).pretty() |
where by = '菜鸟教程' |
小于 | {:{$lt:}} |
db.col.find({"likes":{$lt:50}}).pretty() |
where likes < 50 |
小于或等于 | {:{$lte:}} |
db.col.find({"likes":{$lte:50}}).pretty() |
where likes <= 50 |
大于 | {:{$gt:}} |
db.col.find({"likes":{$gt:50}}).pretty() |
where likes > 50 |
大于或等于 | {:{$gte:}} |
db.col.find({"likes":{$gte:50}}).pretty() |
where likes >= 50 |
不等于 | {:{$ne:}} |
db.col.find({"likes":{$ne:50}}).pretty() |
where likes != 50 |
MongoDB AND 条件 db.col.find({key1:value1, key2:value2}).pretty()
MongoDB OR 条件 db.col.find({$or: [{key1: value1}, {key2:value2}]}).pretty()
AND 和 OR 联合使用 db.col.find({“likes”: {$gt:50}, $or: [{“by”: “菜鸟教程”},{“title”: “MongoDB 教程”}]}).pretty()
查询当前集合的全部文档: db.集合名称.find() 查询出全部符合条件的文档
指定查询指定字段:db.inventory.find( { type: food}, { item: 1
, qty: 1
,age:0} ) 只查询item,qty字段,不显示age字段
查询语句在find()里面加
示例:db.stus.find({age:28})
db.stus.find({age:28,name:“陈鹏”})
db.集合名称.findOne() 查询符合条件的第一条
示例:db.stus.finOne({age:28})
db.集合名称.find().count() 查询出数据的条数 .count()
示例:db.stus.finOne({age:28}).count()
修改
db.集合名称.update(查询条件,修改内容) 修改文档 (要是修改了没有的属性会直接自动添加那个属性)(默认修改的是第一个符合的文档数据)
默认是全部替换文档的全部属性
示例:db.stus.update({name:“陈鹏”},{age:28}) 直接覆盖name为陈鹏的文档并且赋值上age为28(只有一个age属性了)
$set 指定修改某个属性
示例:db.stus.update({name:陈鹏},{$set:{age:28,sex:“男”}}) 修改了name为陈鹏的age属性为28和sex属性为男
$unset 指点删除某个属性
示例:db.stus.update({name:陈鹏},{$unset:{age:随便写}}) 删除了name为陈鹏的age属性
db.集合名称.updateMany(查询条件,修改内容) 修改全部符合条件的文档
示例:db.stus.updateMany({name:陈鹏},{$set:{age:28,sex:“男”}}) 修改了全部name为陈鹏的age属性为28和sex属性为男
db.集合名称.updateOne(查询条件,修改内容) 修改第一个符合条件的文档
示例:db.stus.updateOne({name:陈鹏},{$set:{age:28,sex:“男”}}) 修改了第一条name为陈鹏的age属性为28和sex属性为男
db.集合名称.replaceOne(查询条件,修改内容) 替换第一个符合条件的文档
示例:db.stus.replaceOne({name:陈鹏},{$set:{age:28,sex:“男”}}) 替换了第一条name为陈鹏的文档,文档只有age属性为28和sex属性为男
删除
db.集合名称.remove(删除条件) 删除符合条件的文档(默认删除全部符合条件的文档,删除必须传参数)
示例:db.stus.remove({age:20}) 删除了全部age为20的文档
db.集合名称.removeMany(删除条件) 删除全部符合的
db.集合名称.removeOne(删除条件) 删除第一条符合的
Mongodb的关系(一对一,一对多,多对多)
同过list数组写多个数据在里面做为属性,实现多对多和一对多
在 MongoDB 中使用 sort() 方法对数据进行排序
sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
db.COLLECTION_NAME.find().sort({字段名:1})