mongoDB的学习【小白的福音】

学习mongoDB。
首先下载mongoDB:https://www.mongodb.com/download-center#community;一定要记住自己的安装目录
然后在安装的时候,选择customer格式,才能改目录
我的目录是:c:/program Files/MongoDB/Server/3.6/bin;这里注意,这个是自动默认的
然后安装成功后,在server那个级别里,上面会有一个文件夹。
然后在任意一个盘里面,我用的是F盘,建一个空文件夹叫data,在里面建立一个空文件夹叫db;
在data文件夹里面创建一个startMongo.bat文件,再创建一个mongo.bat文件。
.bat文件称之为快速执行文件。
首先我们要链接mongod.exe 先找到我们的F:/data/ 然后找到c:/program Files/MongoDB/Server/3.6/bin;
然后输入命令行:C:\Program Files\MongoDB\Server\3.6\bin>mongod --dbpath f:/data/db;
成功的标志是:2017-12-07T16:25:44.791+0800 I NETWORK [initandlisten] waiting for connections on port 27017
此时打开db就有东西了,这就说明我们我们已经和mongod关联起来了,后期就可以在这个盘里面存储数据。
//打开连接池的方式
在F:\data下创建一个test.txt文件,编码为utf-8无BOM格式。然后内容为:
c:
cd c:\Program Files\MongoDB\Server\3.6\bin
mongod --dbpath f:/data/db
然后另存为startMongo.bat文件
成功标志为:2017-12-07T16:58:19.483+0800 I NETWORK [initandlisten] waiting for connections
on port 27017
然后双击startMongo.bat文件,就可以打开数据库的连接池。
这里注意一下,当我们建立startMongo.bat的时候,要先把命令窗口给关掉,这样才能验证我们的startMongo.bat是不是成功的。
我安装的时候一直出现闪退的情况,不是很明白为什么。
然后修改test.txt文件为:
c:
cd c:\Program Files\MongoDB\Server\3.6\bin
mongo --dbpath f:/data/db
另存为mongo.bat文件双击

使用的时候,先打开startMongo,链接池打开,命令窗口不能关掉,否则就断了链接池,然后打开mongo.bat,然后又会出现一个尖角号,可以编辑【类似于node出来的交互式解释器】。说明成功了,其实就是进入了shell终端

进入shell终端之后,我们执行几个命令
db 这个显示的是我们的数据库,名字默认为test
db.test =》 test.test这说明db下面有一个叫test的表
db.help() =>获取db下面的方法
db.test.help() => db下面的表test下面的方法
db.test.find().help() =>db下面的表中关于查询的方法。


//创建数据库
1、创建一个名叫movie的数据库
1)首先我们要下载一个可视化工具,叫robomongodb现在改名叫robo 3T:https://robomongo.org/download;
下载的时候我把地址放在了和server的同一级。
然后打开页面,打开的时候先creat一个,然后connect!就连上了我们现在的27017
然后再mongo命令里,输入:
> use movies得到
switched to db movies就创建一个叫做movies的数据库;
这里面有一个规则就是有则切换,无则创建并切换!
这个时候你在在命令行里面输入db得到的就是movies;表示替换了!
但是这个时候你在robo里面右击refresh的时候,movies是不会出来的。为什么呢?因为movies里面没有东西,我们接下来的工作就是要往movies里面写东西。
2)先创建一个集合/表(标的名称为list)
> db.createCollection('list')
{ "ok" : 1 }
这个时候你在robo里面右击refresh的时候,movies就会出来了。里面有一个集合,集合里面有一个叫list的表
这个时候我们再db.list,就会出来movies.list。
3)完成表的增删改查功能
show dbs可以显示当前的数据库
查看数据库的版本:db.version()
查看数据库的状态:db.stats()
查询当前数据库链接的机器地址:db.getMongo()
删除当前的数据库:db.dropDatabase()

2、数据的增删改查 list是你的表名称

我们以豆瓣为例子
首先打开豆瓣的开发者api:https://developers.douban.com/wiki/?title=api_v2
然后找到电影api:https://developers.douban.com/wiki/?title=movie_v2
再找到top250:https://developers.douban.com/wiki/?title=movie_v2#top250
找到对应的url:/v2/movie/top250
把豆瓣的域名和url(相当于路由结合在一起):https://api.douban.com/v2/movie/top250
会得到很多数据,然后打开新的标签页:Json.cn,把数据粘进去
得到之后复制,打开hbuilder,建立一个douban.json文件,粘进去就可以啦!

①增:insert/save
1)增加一条
>>db.list.insert({movieID:1,name:'羞羞的铁拳'})
>>db.list.insertOne({})
>>db.list.save({})
2)增加多条(注意多条数据的时候,外面是数组)
>>db.list.insertMany([{},{},{}])

②删:delect/remove
>>db.list.remove({title:'肖申克的救赎'})但是remove已经过时了,我们用的是deleteOne({})和deleteMany({})
1)删除一条
deleteOne({title:'肖申克的救赎'})
2)删除多条
deleteMany({title:'肖申克的救赎'})
3)删除所有
>>db.list.remove({})
>>db.list.deleteMany({})

③改:update/updataMany
一般都是先查询到,然后再改正
db.list.update({title:'霸王别姬'},{$set:{title:'基佬的救赎'}})
1)以前的方法:$gt : 1 带条件的更新,$gt表示大于1的所有;$lt表示小于;$gte:大于等于;$lte:小于等于;$inc:表示加(这个只能加数字,所以要转换);
db.list.updateMany({year:{$lt:'1995'}},{$set:{year:'1000'}})
db.list.updateMany({year:'1000'},{$inc:{year:1000}})
db.list.updateMany({year:'1000'},{$inc:{year:-1000}}) //表示减1000

>>只更新第一条记录:db.list.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
>>全部更新:db.list.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
>>只添加第一条:db.list.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
>>全部添加加进去:db.list.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
>>全部更新:db.list.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
>>只更新第一条记录:db.list.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );

2)现在的方法:
>>db.list.updateOne({},{})
>>db.list.updateMany({},{})
db.list.updateMany({year:{$lt:'1995'}},{$set:{year:'1000'}})

④查:query/find[重中之重]
db.list.find()可以获得所有的数据的文档,因为篇幅的原因,我把数据只剩下三条。{},{},{}这个时候出来的数据都在一堆,不易阅读。
但是我们需要的是它变成这样:[{},{},{}],也就是一个json文档。那么如何操作呢?我们留下一个疑问!
而pretty()方法以格式化的方式来显示所有文档。
>db.list.find().pretty()命令之后后可以让你的文档更容易观察。

1)有条件的查询
db.list.find({year:'1997'}).pretty()
db.list.find({year:{$gt:{'1997'}}}).pretty()
但是上面这种情况会把相应的所有内容都显示出来,有时候我们只需要自己需要的。

2)有条件的获取自己所知道的。这个和后台就很像了,他只是相应的传给前端一些前端需要的数据。
db.list.find({year:'1997'},{title:1,year:1,"_id":0}).pretty()
结果是这样的:{ "title" : "美丽人生", "year" : "1997" }
db.list.find({year:'1997'},{title:1,year:1,"_id":1}).pretty()
结果是:
{
"_id" : ObjectId("5a2b8cae2bbf13d751991793"),
"title" : "美丽人生",
"year" : "1997"
}

3)当我们查询所有的,但是只要名字和年份的时候,就需要有第二个参数了。第二个参数也是一个对象哦~
db.list.find({},{title:1,year:1,"_id":0}).pretty()
结果就是:
{ "title" : "霸王别姬", "year" : 1000 }
{ "title" : "美丽人生", "year" : "1997" }
{ "title" : "千与千寻", "year" : "2001" }
这里可以发现,year里面一个数字型,两个字符串型。这个是因为上面的某些操作,就是那个转换$icn的那个,所以不用担心啦!

4)下面我们再说加上大于小于的这种查询
db.list.find({year:{$lt:{'1997'}}},{title:1,year:1,"_id":0}).pretty()

5)接着我们讲一下关于取特定的数据,并且把这些数据组成一个数组,然后把重复的去去掉的这种操作
db.list.distinct('year')
结果是:[ 1000, "1997", "2001" ]
!!!这里说一个题外话,就是在robo里面的黑色的条框里面,也可以直接输入命令,然后点击左上角的绿色三角箭头。就可以执行啦~

6)模糊查询 双斜杠//
db.list.find({})
db.list.find({title:/人/},{title:1})

7)条件查询
db.list.find({title:"肖申克的救赎",year:"1994"},{title:1})

8)升序与降序 升序用的是sort 按照什么就用什么 当数值为1的时候为升序 -1为降序
升序>>db.list.find({},{title:1}).sort({year:1})
降序>>db.list.find({},{title:1}).sort({year:1})

9)限制查询的数量 limit,这个只能查询前x条数据
db.list.find({},{title:1}).limit(x)
db.list.find({},{title:1}).limit(5)

10)查询y以后的数据,不包括第10条
db.list.find({},{title:1}).skip(y)
db.list.find({},{title:1}).skip(18)
那么如果想要知道第五条到第八条的数据,就可以:db.list.find({},{title:1}).skip(4).limit(3)
利用上述功能我们可以做分页功能

11)或$or查询 首先是一个$or然后里面是一个数组!
db.list.find({$or:[{year:'1993'},{year:'1995'}]},{title:1,year:1,'_id':0})

12)按照某列进行排序计数,以我的理解就是,先找到符合这个属性的数据,然后统计起来得出一个数值
db.list.find({alt:{$exists:true}}).count()

到这里呢,我们的mongoDB增删改查就告一段落啦~

//接下来就是node.js与mongoDB的并用!

posted @ 2017-12-09 15:28  鐦鐦  阅读(148)  评论(0编辑  收藏  举报