MongoDB

简介

  • MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
  • 在高负载的情况下,添加更多的节点,可以保证服务器性能。
  • MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
  • MongoDB 是一个非关系型的数据库 nosql

特点

  • MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
  • MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
  • MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
  • MongoDB安装简单…

打开与关闭mongodb:

/cmd/ //管理员运行
    - mongod -help  //验证MongoDB安装成功
    - net start MongoDB
    - mongo         //开启MongoDB
    - net stop Mongo//关闭MongoDB

基本组成:

'- 数据库'
    //仓库,用来存放集合
  '- 集合'
    //类似数组,相当于表,集合中可以存放文档
  '- 文档'
    //数据库最小单位,,相当于字段,存储和操作的内容都是文档

增删改查api

启动

/cmd/             //管理员打开
    net start MongoDB //
    mongo			  //启动

数据库级操作

use	dropDatabase_name   //创建stu数据库/切换到stu数据库
show dbs		        //查看所有数据库
db				        //查看当前数据库
db.dropDatabase()       //删除数据库

集合级操作

db.stu.insert()	        //向数据库添加数据(自动创建集合)
db.createCollection(name,options)   //创建集合
show collections                    //查看所有集合
db.collection_name.drop()           //删除指定集合

文档级操作

db.collection_name.insert(document) //插入文档
db.collection_name.save(document)   //插入文档(更新id)
db.collection.insertOne()  //向指定集合中插入一条文档数据
db.collection.insertMany() //向指定集合中插入多条文档数据
db.collection_name.find(query, projection)          //查看stu数据库的所有文档
db.collection_name.update(query,update,upset,multi) //更新文档

列表操作

gt,lt,gte,lte //大于,小于,大于等于,小于等于
limit()       //指定展示多少数据
skip()        //指定跳过多少数据
sort()        //指定排序方式.+1正序,-1倒序

api案例

/cmd/             	//管理员打开
net start MongoDB 	//启动
mongo			  	//验证启动成功
/* ===========增删查============================ */
use H51905        	//创建H51905数据库
show dbs          	//查询所有数据库
db.createCollection('students'{capped:true,max:5,size:1024})   		  	//创建students集合
show collections  	//查询当前数据库的集合
db.students.insert({name:"许晴",age:18,hobby:'抽烟喝酒汤头'})    			//向students集合中插入一条数据
db.students.find()  //查询students集合所有的数据
db.students.save({name:"发撒法",age:21}) //没有id时,同insert,插入
db.students.save({id:2,name:"发撒法",age:21}) //更新id为2的字段
for(var i=0i<10;i++){
   db.students.insert({name:"小明"+i,age:i})                     //插入多条数据,js语法
}                 
db.students.insertMany([{name:"发撒法",age:21},{name:"发撒法",age:21},{name:"发撒法",age:21}])//一次性插入多条数据
db.students.deleteMany()     //删除students的所有字段
db.students.deleteOne({id:1})//删除id为1的数据(一条数据)
db.students.deleteMany({age:16})//匹配age为16的字段,全部删除
db.students.drop()           //删除students集合
show collections             //查询students集合是否存在
db.dropDatabase()               //删除当前数据库
/* =========== 更新 ============================== */
db.students.update({id:1},{$set:{age:20}})                  //找到id为1的字段,修改其age为20
db.students.update({id:0},{$set:{age:20}},{upsert:true})    //找不到id为0的字段时,会插入该字段
db.students.update({id:/0/},{$set:{age:20}},{multi:true})   //匹配以0开头的字段,修改所有匹配的字段的age为20
db.students.update({id:/0/},{$set:{age:20}},false,true)     //全参数的简写
db.students.find({age:$gt:23})   //匹配所有大于23的字段
db.students.update({age:$gt:23},{$et:{name:'黄庆'}})        //匹配所有大于23的字段,并将所有name属性改为'黄庆'
/* =========== 展示 ============================= */
db.students.find.limit(5)  //展示5条数据
db.students.find.skip(5)//跳过前5条数据,从第六条开始展示数据
db.students.find.sort(+1)       //正序展示,-1为倒序展示(数据库不变)
db.students.find.sort({age:-1}) //按照age,倒序展示(限于当前返回的效果)
net stop MongoDB

/* ===========操作数据库 ========================= */
创建数据库:
use DATABASE_NAME
      // 如果数据库不存在,则创建数据库,否则切换到指定数据库。
      // 例如:
      /cmd/
      use h51802
      //switched to db runoob //cmd回应
      db
      //h51802  //cmd回应

查看数据库:
      show dbs
    // 创建的数据库 h51802 并不在数据库的列表中,要显示它,我们需要向 h51802 数据库插入一些数据。
      db.h51802.insert({"name":"吴彦祖"})
      show dbs
    // MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。

删除数据库:
    db.dropDatabase()
/* ===========操作集合 ========================= */

创建集合:

    db.createCollection(name,options)
`参数说明:`
    - name: //要创建的集合名称
    - options: //可选参数, 指定有关内存大小及索引的选项
    // options包括:
    capped  //布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数
    size  //数值(可选为固定集合指定一个最大值(以字节计).如果 capped 为 true,也需要指定该字段。
    max   //数值(可选)指定固定集合中包含文档的最大数量。 |

    // 在 test 数据库中创建hero 集合:
      use test
      db.createCollection("hero")
      { "ok" : 1 }
    // 创建固定集合 mycol,整个集合空间大小 6142800 KB, 文档最大个数为 10000 个。
    db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )
    { "ok" : 1 }
    // 在 MongoDB 中,不需要创建集合。
    // 当你插入一些文档时,MongoDB 会自动创建集合。
    db.mycol2.insert({"name" : "吴彦祖"})
    show collections

查看集合:
  show collections

删除集合:
  db.集合的名字.drop()
  //成功删除选定集合,返回 true,否则返回 false。
/* ===========操作文档 ========================= */
插入文档:
    db.COLLECTION_NAME.insert(document)
    db.COLLECTION_NAME.save(document)
  // 例如:
    db.hero.insert({title: 'MongoDB 教程',
      description: 'MongoDB 是一个 Nosql 数据库',
      by: '吴彦祖',
      url: 'http://www.runoob.com',
      tags: ['mongodb', 'database', 'NoSQL'],
      likes: 100
    })

  `insert和save的区别`
    // 插入文档你也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则save() 方法会更新该 _id 的数据。
    -  db.collection.insertOne()//向指定集合中插入一条文档数据
    -  db.collection.insertMany()//向指定集合中插入多条文档数据

  // 例如:
    '插入单条数据'
    var document = db.collection.insertOne({"a": 3})
    '插入多条数据'
    var res = db.collection.insertMany([{"b": 3}, {'c': 4}])

更新文档:
    db.collection_name.update(query,update,upsert,multi)
    'query' //update的查询条件,类似sql update查询内where后面的。
    'update'//update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
    'upsert'//可选,这个参数的意思是,如果找不到满足查询条件的数据,那么就会添加一条数据进去
    'multi' //可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

  //例如
    db.hero.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
    db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
  `条件操作符`
    // 条件操作符用于比较两个表达式并从mongoDB集合中获取数据。
    (>) 大于 - $gt
    (<) 小于 - $lt
    (>=) 大于等于 - $gte
    (<= ) 小于等于 - $lte

删除文档:
    db.集合名字.deleteOne({})
    // 删除 status 等于 A 的全部文档:
    db.inventory.deleteMany({ status : "A" })

查询文档:
    // find() 方法以非结构化的方式来显示所有文档。
    db.collection.find(query, projection)

展示文档:
    limit() //表示一次展示多少条数据
    skip()  //表示跳过多少条数据
    sort()  //表示排序  +1表示正序 - 1表示倒序