zoukankan      html  css  js  c++  java
  • 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 FilesMongoDBServer3.6in>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 FilesMongoDBServer3.6in
    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 FilesMongoDBServer3.6in
    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的并用!

  • 相关阅读:
    团队冲刺阶段二(八)
    团队项目事后诸葛亮会议
    团队冲刺阶段二(七)
    团队冲刺阶段二(六)
    团队冲刺阶段二(五)
    团队冲刺阶段二(四)
    HTML5 CSS3
    浮动和渐变色,定位position,元素的层叠顺序
    css盒模型。边框和内外边距
    标签分类与元素转换
  • 原文地址:https://www.cnblogs.com/yimei/p/8011610.html
Copyright © 2011-2022 走看看