Mongodb数据库
Mongodb数据库
一、什么是数据库
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库
- 关系型数据库(sql):Access mySql SqlServer oracle db2等。
- 非关系型数据库( NoSql ): MongoDB,Redis,HBase,CouchDB等。
非关系型数据库数据条目其实是bson。bson 是 json 的超集,比如 json 中没法储存二进制类型,而 bson 拓展了类型,提供了二进制支持。mongodb 中存储的一条条记录都可以用 bson 来表示。所以你也可以认为,mongodb 是个存 bson 数据的数据库。
二、NoSQL简介
NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
3.MongoDB简介
- MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
分布式算法指的是将一个大型的任务进行分解,将每一个小任务的执行结果组合起来,返回一个整体
好处: 给其他任务提供了可执行的机会
- MongoDB 是非关系型数据库当中功能最丰富,最像关系型数据库的。
三、MongoDB优点
- 面向集合存储,易存储对象类型的数据。
- 模式*。
- 支持动态查询。
- 支持完全索引,包含内部对象。
- 支持查询。
- 支持复制和故障恢复。
- 使用高效的二进制数据存储,包括大型对象(如视频等)。
- 自动处理碎片,以支持云计算层次的扩展性
- 支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
- 文件存储格式为BSON(一种JSON的扩展)
四、BSON
-
BSON是一种类似json的二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。
-
BSON可以做为网络数据交换的一种存储形式,这个有点类似于Google的ProtocolBuffer,但是BSON是一种schema【骨架】-less的存储形式,它的优点是灵活性高,但它的缺点是空间利用率不是很理想。
-
BSON有三个特点:轻量性、可遍历性、高效性。
五、非关系型数据库与关系型数据库区别
非关系型数据库的优势:
- 性能
NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。
- 可扩展性
同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
关系型数据库的优势:
- 复杂查询
可以用SQL语句方便的在多个表之间做非常复杂的数据查询。
- 事务支持
使得对于安全性能很高的数据访问要求得以实现。
总结:
- 数据库功能是用来存储数据的。
- 数据库分为关系系数据库和非关系型数据库(nosql)
- 关系型数据库是由表和表之间的关系组成的,nosql是由集合组成的,集合下面是很多的文档
- 非关系型数据库文件存储格式为BSON(一种JSON的扩展)。
六、MongoDB
管理员身份运行cmd
1.启动MongoDB
2.将MongoDB安装为windows服务
> mongod --storageEngine mmapv1 --dbpath "d:\mongodb\db" --logpath "d:\mongodb\log\MongoDB.log" --install --serviceName "MongoDB"
启动mongodb服务
> NET START MongoDB
关闭服务和删除进程
> net stop MongoDB
3.MongoDB基础使用
- 查看帮助 >help
> help
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memory, 'global' is default
use <db_name> set current database
db.foo.find() list objects in collection foo
db.foo.find( { a : 1 } ) list objects in foo where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shell
- 显示数据库列表 > show dbs
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
- 创建数据库 > use dbname
> use 1908
switched to db 1908
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
如果数据库不存在,则创建数据库dbname,否则切换到指定数据库dbname。创建的数据库并不在数据库的列表中,要显示它,我们需要向数据库dbname插入一些数据
> db.webs.save({name:"wang"})
WriteResult({ "nInserted" : 1 })
> show dbs
1908 0.000GB
admin 0.000GB
config 0.000GB
local 0.000GB
- 显示数据库中的集合 show collections
> show collections
students
webs
3.1 增加数据
- db.webs.save({“name”:“老李”})
> db.students.save({age:"20"})
WriteResult({ "nInserted" : 1 })
- db.webs.insert({“name”:“ghost”, “age”:10})
> db.student.insert({name:"lisi"})
WriteResult({ "nInserted" : 1 })
- db.webs.insert({name:‘ssss’,msg:{sex:‘man’,age:10}}) 特殊数据条目包含对象
注:查询这个对象中的数据:db.webs.find({‘msg.age’:10})
> db.webs.insert({name:'ssss',sex:'man',obj:{s:'wqehk',g:10}})
WriteResult({ "nInserted" : 1 })
> db.webs.find({'obj.g':10})
{ "_id" : ObjectId("5da4573877f482015bd3759f"), "name" : "ssss", "sex" : "man", "obj" : { "s" : "wqehk", "g" : 10 } }
如果没有web这个集合,mongodb会自动创建
save()和insert()也存在着些许区别:若新增的数据主键已经存在,insert()会不做操作并提示错误,而save()则更改原来的内容为新内容。
_id是主键,主键是每条数据的唯一标识,不能重复,就像身份证是每个人唯一的编号一样.
3.2 删除数据
-
删除文档
- db.users.remove({}) 删除users集合下所有数据
> db.students.remove({}) WriteResult({ "nRemoved" : 2 })
- db.users.remove({“name”: “lecaf”}) 删除users集合下name=”lecaf”的数据
> db.web.remove({name:'lisl'}) WriteResult({ "nRemoved" : 1 })
-
删除集合
- db.users.drop()或db.runCommand({“drop”:“users”}) 删除集合users
> db.students.drop() true > db.runCommand({"drop":"student"}) { "nIndexesWas" : 1, "ns" : "1908.student", "ok" : 1 }
-
删除数据库
- db.runCommand({“dropDatabase”: 1}) 删除当前数据库,注意 此处的1没加双引号。
> db.runCommand({"drop":"student"}) { "nIndexesWas" : 1, "ns" : "1908.student", "ok" : 1 }
3.3 查找数据
- db.users.find() 查找users集合中所有数据
> db.webs.find()
{ "_id" : ObjectId("5da43d8777f482015bd37599"), "name" : "zhangsan", "age" : "18" }
{ "_id" : ObjectId("5da43d9b77f482015bd3759a"), "name" : "lisi", "age" : "20" }
{ "_id" : ObjectId("5da43db377f482015bd3759b"), "name" : "wangwu", "age" : "22" }
- db.users.findOne() 查找users集合中的第一条数据
> db.webs.findOne()
{
"_id" : ObjectId("5da43d8777f482015bd37599"),
"name" : "zhangsan",
"age" : "18"
}
- db.users.find().pretty() 格式化查询到的数据
> db.webs.find().pretty()
{
"_id" : ObjectId("5da43d8777f482015bd37599"),
"name" : "zhangsan",
"age" : "18"
}
{
"_id" : ObjectId("5da43d9b77f482015bd3759a"),
"name" : "lisi",
"age" : "20"
}
{
"_id" : ObjectId("5da43db377f482015bd3759b"),
"name" : "wangwu",
"age" : "22"
}
排序:
- >db.webs.find().sort({age:-1}) 数据从大到小排序,{age:1}则正序
> db.webs.find().sort({age:-1})
{ "_id" : ObjectId("5da445e077f482015bd3759e"), "name" : "zhangsan", "age" : 30 }
{ "_id" : ObjectId("5da445bc77f482015bd3759d"), "name" : "zhangsan", "age" : 24 }
{ "_id" : ObjectId("5da43f5277f482015bd3759c"), "name" : "zhaoliu", "age" : 22 }
{ "_id" : ObjectId("5da43db377f482015bd3759b"), "name" : "wangwu", "age" : 20 }
{ "_id" : ObjectId("5da43d9b77f482015bd3759a"), "name" : "lisi", "age" : 18 }
{ "_id" : ObjectId("5da43d8777f482015bd37599"), "name" : "zhangsan", "age" : 16 }
条件查询:
- >db.webs.find({age:{$gt:10}}) 查询age大于10的数据
- >db.webs.find({age:{$gte:10}}) 查询age大于等于10的数据
- >db.webs.find({age:{$lt:10}}) 查询age小于10的数据
- >db.webs.find({age:{$lte:10}}) 查询age小于等于10的数据
- >db.webs.find({age:{$ne:10}}) 查询age不等于10的数据
- >db.webs.find({age:{lt:20}}) 查询age大于10小于20的数据
当value值是数字字符串时
> db.webs.find({age:{$gt:'20'}})
{ "_id" : ObjectId("5da43db377f482015bd3759b"), "name" : "wangwu", "age" : "22" }
{ "_id" : ObjectId("5da43f5277f482015bd3759c"), "name" : "zhaoliu", "age" : "24" }
{ "_id" : ObjectId("5da445bc77f482015bd3759d"), "name" : "zhangsan", "age" : "30" }
{ "_id" : ObjectId("5da445e077f482015bd3759e"), "name" : "zhangsan", "age" : "60" }
> db.webs.find({age:{$ne:'20'}})
{ "_id" : ObjectId("5da43d8777f482015bd37599"), "name" : "zhangsan", "age" : "18" }
{ "_id" : ObjectId("5da43db377f482015bd3759b"), "name" : "wangwu", "age" : "22" }
{ "_id" : ObjectId("5da43f5277f482015bd3759c"), "name" : "zhaoliu", "age" : "24" }
{ "_id" : ObjectId("5da445bc77f482015bd3759d"), "name" : "zhangsan", "age" : "30" }
{ "_id" : ObjectId("5da445e077f482015bd3759e"), "name" : "zhangsan", "age" : "60" }
> db.webs,find({age:{"$lt":"20","$gt":"18"}})
2019-10-14T18:40:37.113+0800 E QUERY [js] ReferenceError: find is not defined :
@(shell):1:9
- >db.webs.find({age:{$mod:[10,0]}}) 查询age%10==0的数据
> db.webs.find({age:{$mod:[10,2]}})
{ "_id" : ObjectId("5da43f5277f482015bd3759c"), "name" : "zhaoliu", "age" : 22 }
> db.webs.find({age:{$mod:[10,0]}})
{ "_id" : ObjectId("5da43db377f482015bd3759b"), "name" : "wangwu", "age" : 20 }
{ "_id" : ObjectId("5da445e077f482015bd3759e"), "name" : "zhangsan", "age" : 30 }
- >db.webs.find({age:{$in:[1,2,3]}}) 查询age属于[1,2,3]中任何一个的数据
> db.webs.find({age:{$in:[16,18,20]}})
{ "_id" : ObjectId("5da43d8777f482015bd37599"), "name" : "zhangsan", "age" : 16 }
{ "_id" : ObjectId("5da43d9b77f482015bd3759a"), "name" : "lisi", "age" : 18 }
{ "_id" : ObjectId("5da43db377f482015bd3759b"), "name" : "wangwu", "age" : 20 }
- >db.webs.find({age:{$nin:[1,2,3]}}) 查询age不属于[1,2,3]中任何一个的数据
> db.webs.find({age:{$nin:[20]}})
{ "_id" : ObjectId("5da43d8777f482015bd37599"), "name" : "zhangsan", "age" : 16 }
{ "_id" : ObjectId("5da43d9b77f482015bd3759a"), "name" : "lisi", "age" : 18 }
{ "_id" : ObjectId("5da43f5277f482015bd3759c"), "name" : "zhaoliu", "age" : 22 }
{ "_id" : ObjectId("5da445bc77f482015bd3759d"), "name" : "zhangsan", "age" : 24 }
{ "_id" : ObjectId("5da445e077f482015bd3759e"), "name" : "zhangsan", "age" : 30 }
-
>db.webs.find({age:{$size:2}) 查询age是数组且大小为2的数据
-
>db.webs.find({age:{$exists:true}}) 查询包含age字段的数据
> db.webs.find({age:{$exists:true}})
{ "_id" : ObjectId("5da43d8777f482015bd37599"), "name" : "zhangsan", "age" : 16 }
{ "_id" : ObjectId("5da43d9b77f482015bd3759a"), "name" : "lisi", "age" : 18 }
{ "_id" : ObjectId("5da43db377f482015bd3759b"), "name" : "wangwu", "age" : 20 }
{ "_id" : ObjectId("5da43f5277f482015bd3759c"), "name" : "zhaoliu", "age" : 22 }
{ "_id" : ObjectId("5da445bc77f482015bd3759d"), "name" : "zhangsan", "age" : 24 }
{ "_id" : ObjectId("5da445e077f482015bd3759e"), "name" : "zhangsan", "age" : 30 }
- >db.webs.find({age:{$exists:false}}) 查询不包含age字段的数据
> db.webs.find({tel:{$exists:false}})
{ "_id" : ObjectId("5da43d8777f482015bd37599"), "name" : "zhangsan", "age" : 16 }
{ "_id" : ObjectId("5da43d9b77f482015bd3759a"), "name" : "lisi", "age" : 18 }
{ "_id" : ObjectId("5da43db377f482015bd3759b"), "name" : "wangwu", "age" : 20 }
{ "_id" : ObjectId("5da43f5277f482015bd3759c"), "name" : "zhaoliu", "age" : 22 }
{ "_id" : ObjectId("5da445bc77f482015bd3759d"), "name" : "zhangsan", "age" : 24 }
{ "_id" : ObjectId("5da445e077f482015bd3759e"), "name" : "zhangsan", "age" : 30 }
- >db.webs.find({$or:[{age:10},{name:‘zhangsan’}]}}) 查询符合两个条件中任意一个的数据
> db.webs.find({$or:[{age:16},{age:20}]})
{ "_id" : ObjectId("5da43d8777f482015bd37599"), "name" : "zhangsan", "age" : 16 }
{ "_id" : ObjectId("5da43db377f482015bd3759b"), "name" : "wangwu", "age" : 20 }
筛选:
- >db.webs.find().limit(n) 筛选第n个数据以前的所有数据(包括n),n为0或不写都是没有约束
> db.webs.find().limit(0)
{ "_id" : ObjectId("5da43d8777f482015bd37599"), "name" : "zhangsan", "age" : "18" }
{ "_id" : ObjectId("5da43d9b77f482015bd3759a"), "name" : "lisi", "age" : "20" }
{ "_id" : ObjectId("5da43db377f482015bd3759b"), "name" : "wangwu", "age" : "22" }
{ "_id" : ObjectId("5da43f5277f482015bd3759c"), "name" : "zhaoliu", "age" : "24" }
> db.webs.find().limit(2)
{ "_id" : ObjectId("5da43d8777f482015bd37599"), "name" : "zhangsan", "age" : "18" }
{ "_id" : ObjectId("5da43d9b77f482015bd3759a"), "name" : "lisi", "age" : "20" }
- >db.webs.find().limit(10).sort({age:-1}) 排序优先级高,先执行倒序排序,在筛选前十个数据
> db.webs.find().limit(3).sort({age:-1})
{ "_id" : ObjectId("5da445e077f482015bd3759e"), "name" : "zhangsan", "age" : 30 }
{ "_id" : ObjectId("5da445bc77f482015bd3759d"), "name" : "zhangsan", "age" : 24 }
{ "_id" : ObjectId("5da43f5277f482015bd3759c"), "name" : "zhaoliu", "age" : 22 }
- >db.webs.find().skip(n) 获取跳过前n个数据之后的数据
> db.webs.find().skip(5)
{ "_id" : ObjectId("5da445e077f482015bd3759e"), "name" : "zhangsan", "age" : 30 }
{ "_id" : ObjectId("5da4573877f482015bd3759f"), "name" : "ssss", "sex" : "man", "obj" : { "s" : "wqehk", "g" : 10 } }
- >db.webs.find().count() 返回结果集的条数
- >db.webs.find().skip(5).limit(5).count(true) 在加入skip()和limit()这两个操作时,要获得实际返回的结果数,需要一个参数true,否则返回的是符合查询条件的结果总数
> db.webs.find().count()
7
> db.webs.find().limit(3).count(true)
3
- >db.webs.find({name:‘zhangsan’},{age:1,_id:0}) 查找到数据部分显示
> db.webs.find({name:'zhangsan'},{age:1,_id:0})
{ "age" : 30 }
{ "age" : 30 }
{ "age" : 30 }
模糊查询:
- >db.webs.find({name:/zhang/}) 查询字段name中包含zhang的数据
> db.webs.find({name:/san/})
{ "_id" : ObjectId("5da43d8777f482015bd37599"), "name" : "zhangsan", "age" : 16 }
{ "_id" : ObjectId("5da445bc77f482015bd3759d"), "name" : "zhangsan", "age" : 24 }
{ "_id" : ObjectId("5da445e077f482015bd3759e"), "name" : "zhangsan", "age" : 30 }
3.4 修改数据
- db.web.update({“name”:“a1”}, {$set: {sex:”women”}},true,true) 修改name=a1的数据为sex=1,第一个参数是查找条件,第二个参数是修改内容,主键不能修改,第三个参数表示匹配所有符合条件的数据,第四个参数表示修改所有匹配到的数据如图
> db.webs.update({name:'lisi'},{$set:{age:18}},true,true)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
下一篇: 抖音盒子能退款吗 抖音盒子退款教程