学习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\binmongod --dbpath f:/data/db然后另存为startMongo.bat文件成功标志为:2017-12-07T16:58:19.483+0800 I NETWORK [initandlisten] waiting for connectionson port 27017然后双击startMongo.bat文件,就可以打开数据库的连接池。这里注意一下,当我们建立startMongo.bat的时候,要先把命令窗口给关掉,这样才能验证我们的startMongo.bat是不是成功的。我安装的时候一直出现闪退的情况,不是很明白为什么。然后修改test.txt文件为:c:cd c:\Program Files\MongoDB\Server\3.6\binmongo --dbpath f:/data/db另存为mongo.bat文件双击使用的时候,先打开startMongo,链接池打开,命令窗口不能关掉,否则就断了链接池,然后打开mongo.bat,然后又会出现一个尖角号,可以编辑【类似于node出来的交互式解释器】。说明成功了,其实就是进入了shell终端
进入shell终端之后,我们执行几个命令
db 这个显示的是我们的数据库,名字默认为testdb.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的并用!