————————————————————————————————————————————————————————————
-----------------今日份复习nodejs----------------------------
----- Mongodb数据可以介绍
----- Mongodb数据库操作
————————————————————————————————————————————————————————————
————————————————
存储数据。
1.2 什么是数据库?数据库(Database)是按照数据结构来组织,存储和管理数据的仓库。主要用他进行管理各种系统的数据,作为科学研究和决策的重要技术手段。
1.3 关系型数据库按照关系模型存储数据的数据库,数据与数据之间的关联非常密切,可以实现跨数据表查询数据,占用更少的硬盘实现更多数据存储。
T-SQL标准的结构化查询语言是关系型数据库的通用查询语言。
关系型数据库:Access, mysql ,sqlServer, oracle, db2等
不按关系模型存储数据的数据库统称为noSQL。
一层含义:不是SQL,不是关系型数据库。
第二层含义,not only SQL,不仅仅是SQL。
非关系型数据库: MongoDB, Redis, Hbase, CouchDB, SQLite等
关系型数据库结构:一台服务器 -> 数据库 -> 数据表 -> 数据行
非关系型数据库结构:一台服务器 -> 数据库 -> 集合 -> 文档
MongoDB是一个基于分布式文件存储的数据库。由c++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是非关系型数据库当中功能最丰富,最像关系型数据库的。
他的特点是高性能,易部署,易使用,存储数据非常方便;
MongoDB以BSON(二进制 + JSON)格式进行数据存储,可以直接对象,数组。
//告诉计算机将数据库放在以下文件中去
mongod --dbpath "d:\mongodb\db"
//告诉服务器将日志文件放在以下文件夹中去
--logpath "d:\mongodb\log\mongodb.log"
//挂载成为windows服务
--install --serviceName "MongoDB"
这时候就会在服务与程序中发现一个叫做MongoDB Server服务
2.补充服务的命令
+ 服务开启的命令 net start mongodb
+ 服务关闭的命令 net stop mongodb
+ 卸载服务的命令 sc delete mongodb
我们以服务员身份打开cmd运行以上命令就会出现以下结果
mongo进入数据库管理模式
exit 退出数据库管理模式
db.user.insert({"name":"admin","age":"10"})
db.user.insert({"name":"admin","password":"123456"})
非关系型数据库也可以插入不同键名的数据
db.user.insert({"name":"admin","password":"123456","age":18,"qq":"861918672})
insert()和save()方法的区别:
insert()是单纯的向数据库添加数据。
save()也是向数据库添加数据,如果数据库中的数据已经存在该数据则更新数据。更新的话需要传入该条数据的id。
db.user.find();
结果:
{ "_id" : ObjectId("5e815bd6424a337d44c4d41b"), "name" : "admin", "password" : "123456" }
{ "_id" : ObjectId("5e815be0424a337d44c4d41c"), "name" : "admin", "password" : "123456" }
db.集合名.find({条件对象}) 按照条件对象来查找
举例:
db.user.find({"age":"20"})
结果:
{ "_id" : ObjectId("5e815e51424a337d44c4d41f"), "name" : "admin", "age" : "20" }
db.集合名.find().pretty() 格式化输出json对象
举例:
对比:
db.user.find();
{ "_id" : ObjectId("5e815e4c424a337d44c4d41e"), "name" : "admin", "age" : "10" }
{ "_id" : ObjectId("5e815e51424a337d44c4d41f"), "name" : "admin", "age" : "20" }
{ "_id" : ObjectId("5e815e55424a337d44c4d420"), "name" : "admin", "age" : "30" }
{ "_id" : ObjectId("5e815e58424a337d44c4d421"), "name" : "admin", "age" : "34" }
{ "_id" : ObjectId("5e815e69424a337d44c4d422"), "name" : "admin", "age" : "24" }
db.user.find().pretty();
{
"_id" : ObjectId("5e815e4c424a337d44c4d41e"),
"name" : "admin",
"age" : "10"
}
{
"_id" : ObjectId("5e815e51424a337d44c4d41f"),
"name" : "admin",
"age" : "20"
}
{
"_id" : ObjectId("5e815e55424a337d44c4d420"),
"name" : "admin",
"age" : "30"
}
{
"_id" : ObjectId("5e815e58424a337d44c4d421"),
"name" : "admin",
"age" : "34"
}
{
"_id" : ObjectId("5e815e69424a337d44c4d422"),
"name" : "admin",
"age" : "24"
}
修改数据> db.user.find({"name":"mr.kang"})
{ "_id" : ObjectId("5e8160d8424a337d44c4d423"), "name" : "mr.kang", "age" : 20 }
//修改数据 将这条数据的age更改为100
> db.user.update({"name":"康家豪"},{"age":100})
> WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> 结果:
> { "_id" : ObjectId("5e8160d8424a337d44c4d423"), "age" : 100 }
我们可以注意到ObjectId并没有发生改变。
删除数据> db.user.remove({})
WriteResult({ "nRemoved" : 6 })
db.user.remove({条件}) 按照条件删除数据
代码演示:
//删除name为li的这条数据
> db.user.remove({"name":"li"})
WriteResult({ "nRemoved" : 1 })
> db.user.find()
{ "_id" : ObjectId("5e816429424a337d44c4d424"), "name" : "kang", "age" : 18 }
{ "_id" : ObjectId("5e816433424a337d44c4d425"), "name" : "wang", "age" : 20 }
>
4.MongoDB数据库的高级用法
先添加一组singer数据:
db.singer.insert({
"num" : "1",
"name" : "刘德华",
"country":"中国",
"sex" : "男",
"age" : 55,
"score":100,
"works" : ["爱你一万年", "忘情水", "来生缘", "我不够爱你"],
"description" : "1961年9月27日出生于中国香港,演员、歌手、作词人、制片人,影视歌多栖发展的代表艺人之一。"
});
db.singer.insert({
"num" : "2",
"name" : "张学友",
"country":"中国",
"sex" : "男",
"age" : 55,
"score":90,
"works" : ["一路上有你", "你好毒", "想和你去吹吹风"],
"description" : "1961年7月10日出生于香港,中国香港男歌手、演员,毕业于香港崇文英文书院。1984年因获得首届香港十八区业余歌唱大赛冠军而出道。"
});
db.singer.insert({
"num" : "3",
"name" : "黎明",
"country":"中国",
"sex" : "男",
"age" : 50,
"score":88,
"works" : ["今夜你会不会来"],
"description" : "1966年12月11日生于北京,歌手、演员、导演、商人、慈善事业工作者。"
});
db.singer.insert({
"num" : "4",
"name" : "郭富城",
"country":"中国",
"sex" : "男",
"age" : 51,
"score":70,
"works" : ["对你爱不完", "动起来", "我是不是该安静的走开"],
"description" : "1965年10月26日出生于香港,华语流行男歌手、演员、舞者,演唱会舞蹈总监,华语歌坛劲歌热舞代表人物之一。"
});
db.singer.insert({
"num" : "5",
"name" : "薛之谦",
"country":"中国",
"sex" : "男",
"age" :33,
"score":95,
"works" : ["认真的雪"],
"description" : "1983年7月17日出生于上海,华语流行乐男歌手、音乐制作人、演员、商人,毕业于格里昂酒店管理学院。"
});
db.singer.insert({
"num" : "6",
"name" : "李宇春",
"country":"中国",
"sex" : "女",
"age" : 32,
"score":65,
"works" : ["梨花香", "蜀绣"],
"description" : "1984年3月10日出生于成都,中国流行女歌手、词曲创作人、电影演员、演唱会导演。"
});
db.singer.insert({
"num" : "7",
"name" : "周杰伦",
"country":"中国",
"sex" : "男",
"age" : 37,
"score":59,
"works" : ["青花瓷","双截棍","七里香","发如雪","简单爱"],
"description" : "1979年1月18日出生于台湾省新北市,中国台湾流行乐男歌手、音乐人、演员、导演、编剧、监制、商人。"
});
db.singer.insert({
"num" : "8",
"name" : "赵丽颖",
"country":"中国",
"sex" : "女",
"age" : 29,
"score":69,
"works" : ["花千骨插曲不可说"],
"description" : "1987年10月16日出生于河北省廊坊市,中国内地影视女演员。"
});
db.singer.insert({
"num" : "9",
"name" : "黄龄",
"country":"中国",
"sex" : "女",
"age" : 29,
"score":88,
"works" : ["high歌", "痒"],
"description" : "1987年2月13日出生于上海市,中国内地流行乐女歌手、戏剧演员。"
});
db.singer.insert({
"num" : "10",
"name" : "PSY",
"country":"韩国",
"sex" : "男",
"age" : 39,
"score":39,
"works" : ["江南style"],
"description" : "1977年12月31日出生于韩国首尔,韩国歌手。"
});
db.singer.insert({
"num" : "11",
"name" : "杰克逊",
"country":"美国",
"sex" : "男",
"age" : 51,
"score":0,
"works" : ["beat it"],
"description" : "1958年8月29日在美国印第安纳州加里市出生,美国歌手、词曲创作人、舞蹈家、表演家、慈善家、音乐家、人道主义者、和平主义者、慈善机构创办人。"
});
db.singer.insert({
"num" : "12",
"name" : "杨坤",
"country":"中国",
"sex" : "男",
"age" : 44,
"score":90,
"works" : ["无所谓", "月亮代表我的心"],
"description" : "1972年12月18日生于内蒙古包头,中国创作歌手。2001年5月,杨坤正式签约北京竹书文化唱片公司。发行第一张专辑《无所谓》。"
});
db.singer.insert({
"num" : "13",
"name" : "刘欢",
"country":"中国",
"sex" : "男",
"age" : 43,
"score":80,
"works" : ["玩玩的月亮", "从头再来"],
"description" : "生于1963年8月26日,流行音乐家,对外经济贸易大学音乐教授。"
});
db.singer.insert({
"num" : "14",
"name" : "王菲",
"country":"中国",
"sex" : "女",
"age" : 46,
"score":70,
"works" : ["相约1998", "红豆", "容易受伤的女人"],
"description" : "王菲,中国著名女歌手、影视演员,是1990年代初期至今华语乐坛最出色的女歌手之一,被公认为乐坛天后。"
});
db.singer.insert({
"num" : "15",
"name" : "林志炫",
"country":"中国",
"sex" : "男",
"age" : 46,
"score":80,
"works" : ["单身情歌"],
"description" : "1966年7月6日生于台湾,歌手、音乐制作人。"
});
4.1条件查找
案例1:查找女歌星
思路:查找sex = “女” 条件
db.singer.find({"sex":"女"})
结果:
{
"_id" : ObjectId("5e817121424a337d44c4d42c"),
"num" : "6",
"name" : "李宇春",
"country" : "中国",
"sex" : "女",
"age" : 32,
"score" : 65,
"works" : [
"梨花香",
"蜀绣"
],
"description" : "1984年3月10日出生于成都,中国流行女歌手、词曲创作人、电影演员、演唱会导演。"
}
{
"_id" : ObjectId("5e817122424a337d44c4d42e"),
"num" : "8",
"name" : "赵丽颖",
"country" : "中国",
"sex" : "女",
"age" : 29,
"score" : 69,
"works" : [
"花千骨插曲不可说"
],
"description" : "1987年10月16日出生于河北省廊坊市,中国内地影视女演员。"
}
{
"_id" : ObjectId("5e817122424a337d44c4d42f"),
"num" : "9",
"name" : "黄龄",
"country" : "中国",
"sex" : "女",
"age" : 29,
"score" : 88,
"works" : [
"high歌",
"痒"
],
"description" : "1987年2月13日出生于上海市,中国内地流行乐女歌手、戏剧演员。"
}
{
"_id" : ObjectId("5e817122424a337d44c4d434"),
"num" : "14",
"name" : "王菲",
"country" : "中国",
"sex" : "女",
"age" : 46,
"score" : 70,
"works" : [
"相约1998",
"红豆",
"容易受伤的女人"
],
"description" : "王菲,中国著名女歌手、影视演员,是1990年代初期至今华语乐坛最出色的女歌手之一,被公认为乐坛天后 。"
}
案例2:查找年龄大于50岁的歌星 大于 gt小于gt 小于gt小于lt
思路: “age” > 50
> db.singer.find({"age":{$gt:50}}).pretty()
{
"_id" : ObjectId("5e817121424a337d44c4d427"),
"num" : "1",
"name" : "刘德华",
"country" : "中国",
"sex" : "男",
"age" : 55,
"score" : 100,
"works" : [
"爱你一万年",
"忘情水",
"来生缘",
"我不够爱你"
],
"description" : "1961年9月27日出生于中国香港,演员、歌手、作词人、制片人,影视歌多栖发展的代表艺人之一。"
}
{
"_id" : ObjectId("5e817121424a337d44c4d428"),
"num" : "2",
"name" : "张学友",
"country" : "中国",
"sex" : "男",
"age" : 55,
"score" : 90,
"works" : [
"一路上有你",
"你好毒",
"想和你去吹吹风"
],
"description" : "1961年7月10日出生于香港,中国香港男歌手、演员,毕业于香港崇文英文书院。1984年因获得首届香港十八区业余歌唱大赛冠军而出道。"
}
{
"_id" : ObjectId("5e817121424a337d44c4d42a"),
"num" : "4",
"name" : "郭富城",
"country" : "中国",
"sex" : "男",
"age" : 51,
"score" : 70,
"works" : [
"对你爱不完",
"动起来",
"我是不是该安静的走开"
],
"description" : "1965年10月26日出生于香港,华语流行男歌手、演员、舞者,演唱会舞蹈总监,华语歌坛劲歌热舞代表人物 之一。"
}
{
"_id" : ObjectId("5e817122424a337d44c4d431"),
"num" : "11",
"name" : "杰克逊",
"country" : "美国",
"sex" : "男",
"age" : 51,
"score" : 0,
"works" : [
"beat it"
],
"description" : "1958年8月29日在美国印第安纳州加里市出生,美国歌手、词曲创作人、舞蹈家、表演家、慈善家、音乐家、人道主义者、和平主义者、慈善机构创办人。"
}
注意:大于等于是这样的
> db.singer.find({"age":{$gte:50}}).pretty()
案例3:查找年龄在30-40岁之间的歌星(查询指定范围歌星)
思路: "age"> 30 && age db.singer.find({"age":{$gte:30,$lte:40}}).pretty()
{
"_id" : ObjectId("5e817121424a337d44c4d42b"),
"num" : "5",
"name" : "薛之谦",
"country" : "中国",
"sex" : "男",
"age" : 33,
"score" : 95,
"works" : [
"认真的雪"
],
"description" : "1983年7月17日出生于上海,华语流行乐男歌手、音乐制作人、演员、商人,毕业于格里昂酒店管理学院。"
}
{
"_id" : ObjectId("5e817121424a337d44c4d42c"),
"num" : "6",
"name" : "李宇春",
"country" : "中国",
"sex" : "女",
"age" : 32,
"score" : 65,
"works" : [
"梨花香",
"蜀绣"
],
"description" : "1984年3月10日出生于成都,中国流行女歌手、词曲创作人、电影演员、演唱会导演。"
}
{
"_id" : ObjectId("5e817121424a337d44c4d42d"),
"num" : "7",
"name" : "周杰伦",
"country" : "中国",
"sex" : "男",
"age" : 37,
"score" : 59,
"works" : [
"青花瓷",
"双截棍",
"七里香",
"发如雪",
"简单爱"
],
"description" : "1979年1月18日出生于台湾省新北市,中国台湾流行乐男歌手、音乐人、演员、导演、编剧、监制、商人。"
}
{
"_id" : ObjectId("5e817122424a337d44c4d430"),
"num" : "10",
"name" : "PSY",
"country" : "韩国",
"sex" : "男",
"age" : 39,
"score" : 39,
"works" : [
"江南style"
],
"description" : "1977年12月31日出生于韩国首尔,韩国歌手。"
}
案例4:查询外国歌手
思路: 不等于中国歌手
db.singer.find({"country":{$ne:"中国"}})
> db.singer.find({"country":{$ne:"中国"}}).pretty()
{
"_id" : ObjectId("5e817122424a337d44c4d430"),
"num" : "10",
"name" : "PSY",
"country" : "韩国",
"sex" : "男",
"age" : 39,
"score" : 39,
"works" : [
"江南style"
],
"description" : "1977年12月31日出生于韩国首尔,韩国歌手。"
}
{
"_id" : ObjectId("5e817122424a337d44c4d431"),
"num" : "11",
"name" : "杰克逊",
"country" : "美国",
"sex" : "男",
"age" : 51,
"score" : 0,
"works" : [
"beat it"
],
"description" : "1958年8月29日在美国印第安纳州加里市出生,美国歌手、词曲创作人、舞蹈家、表演家、慈善家、音乐家、人道主义者、和平主义者、慈善机构创办人。"
}
案例5:in字句:(枚举) 不属于 nin
db.singer.find({"key":{$in:[数组]}})
> db.singer.find({"name":{$in:["刘德华","薛之谦"]}}).pretty()
{
"_id" : ObjectId("5e817121424a337d44c4d427"),
"num" : "1",
"name" : "刘德华",
"country" : "中国",
"sex" : "男",
"age" : 55,
"score" : 100,
"works" : [
"爱你一万年",
"忘情水",
"来生缘",
"我不够爱你"
],
"description" : "1961年9月27日出生于中国香港,演员、歌手、作词人、制片人,影视歌多栖发展的代表艺人之一。"
}
{
"_id" : ObjectId("5e817121424a337d44c4d42b"),
"num" : "5",
"name" : "薛之谦",
"country" : "中国",
"sex" : "男",
"age" : 33,
"score" : 95,
"works" : [
"认真的雪"
],
"description" : "1983年7月17日出生于上海,华语流行乐男歌手、音乐制作人、演员、商人,毕业于格里昂酒店管理学院。"
}
案例6:排序(1代表升序,-1代表降序)
根据分数score排序
db.singer.find().sort({"key":-1,"key2":1})
案例7:模糊查询 加i不区分大小写
db.singer.find({"name":/刘/i})
//查找出所有姓刘的明星
> db.singer.find({"name":/刘/i}).pretty()
{
"_id" : ObjectId("5e817121424a337d44c4d427"),
"num" : "1",
"name" : "刘德华",
"country" : "中国",
"sex" : "男",
"age" : 55,
"score" : 100,
"works" : [
"爱你一万年",
"忘情水",
"来生缘",
"我不够爱你"
],
"description" : "1961年9月27日出生于中国香港,演员、歌手、作词人、制片人,影视歌多栖发展的代表艺人之一。"
}
{
"_id" : ObjectId("5e817122424a337d44c4d433"),
"num" : "13",
"name" : "刘欢",
"country" : "中国",
"sex" : "男",
"age" : 43,
"score" : 80,
"works" : [
"玩玩的月亮",
"从头再来"
],
"description" : "生于1963年8月26日,流行音乐家,对外经济贸易大学音乐教授。"
}
其他方法大家有需求的话就去百度查找,这里只列举了一部分比较常用的方法。
————————————————————————————————————
写在后面
隔壁孩子10篇博客node入门而且写了一个前后端分离项目,你怎么还在睡觉!!!(六)
mongoose学习
使用express + mongoDB + mongoose 实现一个具有登录注册,增删查改的新闻系统
——————————————————————————————————
————————————————