MongoDB简介:
【定义】
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富的,最像关系数据库的。
MongoDB在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成,类似于JSON对象,字段值可以包含其他文档,数组及文档数组。
【优点】
-
文档结构的存储方式,能够更便捷的获取数据
-
内置GridFS,支持大容量的存储
-
海量数据下,性能优越
-
动态查询
-
全索引支持,扩展到内部对象和内嵌数组
-
查询记录分析
-
快速,就地更新
-
高效存储二进制大对象 (比如照片和视频)
-
复制(复制集)和支持自动故障恢复
-
内置 Auto- Sharding 自动分片支持云级扩展性,分片简单
-
MapReduce 支持复杂聚合
-
商业支持,培训和咨询
【缺点】
-
不支持事务操作
-
MongoDB 占用空间过大 (不过这个确定对于目前快速下跌的硬盘价格来说,也不算什么缺点了)
-
MongoDB没有如MySQL那样成熟的维护工具
-
无法进行关联表查询,不适用于关系多的数据
-
复杂聚合操作通过mapreduce创建,速度慢
-
模式自由,自由灵活的文件存储格式带来的数据错
-
MongoDB 在你删除记录后不会在文件系统回收空间。除非你删掉数据库。但是空间没有被浪费
MongoDB下载:
1.网址: MongoDB: The Developer Data Platform | MongoDB
2.点击【Try Free】=>点击【Server】选择合适的版本,下载(最好不要下载到系统盘)
MongoDB安装&启动:
文件夹下的【data】目录,新建【db】文件夹
1.执行命令
mongod --dbpath E:\mongo\data\db //在【bin】目录下打开cmd,E:\后为db的路径
>mongo服务器
>1.找到服务器文件夹,路径为C:\MongoDB\Server\3.6\bin
>2.进入路径(path)之后(双击复制路径)进行全局变量配置
>Mongo数据库(一个新的文件夹)
>1.文件夹路径为 D:\mongo_data\db
>启动mongo
1.启动mongo服务器,让mongo服务器关联mongo数据库(文件夹)路径
2.打开一个cmd 之中执行 mongod --dbpath D:\mongo_data\db
3.再开一个cmd 之中执行 mongo
【解析】mongod :表示让计算机在全局环境变量之中的path路径 查找对应的mongod 开启mongo服务器
--dbpath:参数;参数是用来配置前一个指令的;配置mongo服务器关联的数据库文件夹位置
D:\mongo_data\db 数据库文件夹路径
4、mongo,服务器端口号:27017
>>nodejs + mongo 必须有驱动
>安装mongodb
>连接数据库
增删改查:
//文档插入
MongoClient.connect(url,(err,client)=>{
if(err) return console.error("链接发生错误");
// console.log("链接成功");
let db = client.db("lily");
let collections = db.collection("hello");
//插入数据
collections.insertMany([{a:1},{b:2},{c:3}],(err,result)=>{
// console.log(result);
})
//修改数据
collections.update({a:1},{$set:{a:10}},(err,result)=>{
// console.log(result);
})
//删除数据
collections.deleteMany({a:10},(err,result)=>{
})
// 查询数据
collections.find().toArray((err,data)=>{
console.log(data);
})
//可以进行分页查询的
// collections.find().skip(1).limit(1).toArray((err,data)=>{
// console.log(data);
// })
client.close();
})
>>导入json数据
1、在bin目录下运行终端,输入 mongoimport --db lily--collection lily1 --type json --file F:\JS\lever3\lily\1026\douban\data.json
2、成功后执行mongo
3、查询数据表里书否存在这个数据 db.lily1.find().pretty()
4、查询数据表里有几条数据 db.lily1.find().count()
mongo命令合集
查看数据库列表 $ Show dbs 检查数据库
创建数据库 $ use 数据库名称
创建集合 $ db.createCollection(“集合名”) // 集合 === 表
>{ok:1}
查看集合(一定先进入对应数据库再进行查看)
$ db.getCollectionNames()
>[‘集合名']
插入数据 $ db.集合名.insertOne(数据集合({}json形式的数据)) // 文档 === 列
>{
"acknowledged" : true, //是否插入成功
"insertedId" : ObjectId("5aab2aaa93468a71aec836ce”)//插入的id
}
查看数据 $ db.music.find() 查看数据库中的数据
>
{ "_id" : ObjectId("5aab2aaa93468a71aec836ce"), "title" : "回娘家" }
{ "_id" : ObjectId("5aab2b5e93468a71aec836cf"), "title" : "再见理想" }
Help命令
db.help() //db下的指令
db.test.help(); // db.test 下的所有指令
db.test.find().help(); //db.test.find下的所有指令
………强大的help指令
使用数据库
use 数据库名
查询数据陆
show dbs
查看当前使用的数据库
db/db.getName();
显示当前的数据库状态
db.stats();
查看当前db的版本
db.version();
查看数据库连接地址;
db.getMongo()
删除数据库
db.dropDatabase()
tip:删除当前使用的数据库。
集合(collection)操作
1.创建
createCollection(“collName”,{size:20,cappeu:true,max:10})
2.得到指定名称的集合
db.getCollection(“account”)
3.得到当前db所有的集合;
db.getCollectionNames()
4.显示当前db所有集合状态
db.printCollectionStats();
5.删除集合
db.COLLECTION_NAME.drop();
集合数据操作(添加,修改,删除)update | updateMany()
1.添加 insert([,…]|{key:value,...})
db.users.save({name:”zhangsan”,”age”:25,sex:true})
2.修改 updata(条件({}))
db.users.update({age:25},{$set:{name:”changeName”}},false,true)
相当于sql语句的 update users set name = “changeName” where age = 25;
db.users.update({name:”Lisi”},{$inc:{age:50}},false,true)
相当于sql语句的 update users set age = age + 50 where name =“lisi”
db.users.update({name:”Lisi”},{$inc:{age:50},$set:{name:’hoho’}},false,true)
相当于sql语句的 : update users set age = age + 50 ,name = ‘hoho’ where name = “lisi"
3.删除
db.users.remove({age:132})
db.users.delete()
db.users.deleteOne()
db.users.deleteMany()
豆瓣api api.douban.com/v2/movie/top250
豆瓣数据的操作:
获取到豆瓣的数据,然后将数据放入数据库之中。
查找对应数据;
db.movie.find(条件,显示内容)
db.movie.find({year:1994},{title:1,year:1,_id:0})//表示显示 title1 和 year1 _id不显示;
1.表示显示 0.表示不显示;
排序
根据评分排序:
db.movie.find({},{title:1,year:1,_id:0,'rating.average':1}).sort({'rating.average':-1})
条件判断:$gt 大于; $lt 小于; $gte 大于等于 $lte 小于等于;
db.movie.find({‘arting.average’:$gt:9.5},{title:1,year:1,_id:0,'rating.average':1}).sort({'rating.average':-1})
分类筛选:
$in 包含 $nin 不包含
db.movie.find({genres:{$in:["犯罪","剧情"]}},{title:1,year:1,_id:0,'rating.average':1}).sort({'rating.average':-1})
nodejs + mongo
链接数据库:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/test";
MongoClient.connect(url, function (err, db) {
if (err) throw err;
console.log("数据库链接已创建!");
db.close();
});
创建数据库操作对象:
var dataBase = db.db("test");
dataBase.createCollection("coll",function(err,res){
if(err) throw err;
console.log("创建集合");
db.close();
})
数据库操作collection
dataBase.collection("coll").insert({},()=>{
})
数据库查询操作:
dbo.collection("coll").find({}).toArray(function (err, result) { // 返回集合中所有数据
if (err) throw err;
console.log(result);
db.close();
});
数据库更新操作:
dbo.collection(“coll").update(whereStr, updateStr, function (err, res) {
if (err) throw err;
console.log("文档更新成功");
db.close();
});
数据库删除操作:
dbo.collection("coll").deleteOne(whereStr, function (err, obj) {
if (err) throw err;
console.log("文档删除成功");
db.close();
});
limt方法:
dbo.collection(“coll").find().limit(2).toArray(function (err, result) {
if (err) throw err;
console.log(result);
db.close();
});
skip方法:
dbo.collection("site").find().skip(2).limit(2).toArray(function (err, result) {
if (err) throw err;
console.log(result);
db.close();
});
删除集合
dbo.collection("test").drop(function (err, delOK) { // 执行成功 delOK 返回 true,否则返回 false
if (err) throw err;
if (delOK) console.log("集合已删除");
db.close();
});