mongodb学习总结

表结构对比MongoDBMysql
collectionstables
documentsrows
主键_idid 与业务无关的值作为主键
约束主键约束,外键约束

mysqlMongoDB
进去库use dbnameuse dbname
显示表列表show tablesshow collections
查询主从状态show slave statusrs.status
创建库create database name无需单独创建,直接use进去
创建表create table tname(id int)无需单独创建,直接插入数据
删除表drop table tnamedb.tname.drop()
删除库drop database dbname首先进去该库,db.dropDatabase()
插入记录insert into tname(id) value(2)db.tname.insert({id:2})
删除记录delete from tname where id=2db.tname.remove({id:2})
修改/更新记录update tname set id=3 where id=2;db.tname.update({id:2}, {$set:{id:3}},false,true)
查询所有记录select * from tname;db.tname.find()
查询所有列select id from tname;db.tname.find({},{id:1})
条件查询select * from tname where id=2;db.tname.find({id:2})
条件查询select * from tname where id < 2;db.tname.find({id:{$lt:2}})
条件查询select * from tname where id >=2;db.tname.find({id:{$gte:2}})
条件查询select * from tname where id=2 and name=‘steve’;db.tname.find({id:2, name:‘steve’})
条件查询select * from tname where id=2 or name=‘steve’;db.tname.find($or:[{id:2},{name:‘steve’}])
条件查询select * from tname limit 1;db.tname.findOne()
模糊查询select * from tname where name like “%ste%”;db.tname.find({name:/ste/})
模糊查询select * from tname where name like “ste%”;db.tname.find({name:/^ste/})
获取表记录数select count(id) from tname;db.tname.count()
获取有条件的记录数select count(id) from tname where id=2;db.tname.find({id:2}).count()
查询时去掉重复值select distinct(last_name) from tname;db.tname.distinct(‘last_name’)
正排序查询select * from tname order by id;db.tname.find().sort({id:1})
逆排序查询select * from tname order by id desc;db.tname.find().sort({id:-1})

特别要注意的是:mongodb插入多个字段语法

  db.user.insert({id:1,name:‘steve’,sex:‘male’}) 正确

  db.user.insert({id:2},{name:‘bear’},{sex:‘female’}) 错误


查询

  • findOne()
    • 不是查找一条语句,而是查找集合中符合条件的第一个文档
    • findOne()的One首字母一定要大写
    • 返回的是一个对象
    • e.g: db.stu.findOne().name
  • find():返回的是一个数组
    • ;e.g: db.stu.find().[index].name 可以索引
    • find({})空对象 / find()不写参数,也可以查找数据
  • find.count()
    • 返回有几条数据 .length()也可以

更新修改

  • db.collection.update(查询条件,新对象)
    • 默认情况下会用新对象替换就对象 即:

       “name” : “aaa”,
      “age” : “19”,
      “gender” : “nan”

       执行db.stu.update({name:“aaa”},{age:“91”})

       结果:“age” : “91”
    • 使用修改操作符来修改指定的属性,而不是替换

      KaTeX parse error: Expected 'EOF', got '&' at position 16: set==:用来修改<br> &̲emsp;e.g:db.stu…set:{
      name:“ccc”,
      gender:“nan”
      }}
      )注意:花括号有几个

      $unset==:用来删除文档指定属性
  • update()默认情况下只会修改一条数据,若要修改多条数据,可以使用updateMany()

删除

  • db.collections.remove()
     删除一条或多条语句,若删除多条语句,则第二个参数为true。

    注意:remove()不写参数会报错 remove({})会清空集合
    • 若真的需要清空集合,则选db.conllections.drop() remove({})性能较差 需要一个个去匹配
      -一般公司不会真的使用drop()去删除数据库,而是添加一个字段 [Isdel:0] 未删除

  • 一般创建集合时,选择复数,即:tests
  • 内嵌文档:文档里面插入文档
    -MongoDB支持通过内嵌文档的属性进行查询,如果要查询内嵌文档则可以通过.的形式来匹配
    • 如果要通过内嵌文档来对文档进行查询,此时属性名必须使用引号  单双引号都可以
      • 正确:db.collections.find({“hobby.movies”:“hero”});
      • 错误:db.collections.find({hobby.movies:“hero”});

        -若内嵌文档是数组的形式,如{“name”:“aa”,“hobby”:{“movies”:[“sanguo”,“hero”]}} 若要往里添加数据,则不能使用$set,因为数组会被覆盖
      • $push 用于向数组中添加一个新元素
        • db.collections.update({name:“aa”},{$push:{hobby.movies:“hhhh”}})
      • $addToSet 也可以向数组中添加一个元素
    • 区别 p u s h 不 会 考 虑 数 据 重 复 性 的 问 题 , 而 push不会考虑数据重复性的问题,而 pushaddToSet则不会重复添加已存在的数据
  • 插入N条数据:
    • for(var i=1;i<20000;i++)  db.numbers.insert({num:i}); Ps:耗时多
    • 优选:var arr=[]; for(var i=1;i<20000;i++)  arr.push({num:i})
    • db.numbers.insert(arr);
  • 比较操作符

大于$gt
大于等于$gte
小于$lt
小于等于$lte
等于$eq

  • 查询小于30的文档
    • db.collections.find({num:{$lt:30}});
  • 查询大于40小于50的文档
    • db.collections.find({num:{ g t : 40 , gt:40, gt:40,lt:50}});
  • 查询小于40大于50的文档
    • db.collections.find(==KaTeX parse error: Expected '}', got 'EOF' at end of input: or==:[{num:{lt40}},{num:{$gt50}}])
  • $inc:在原有的基础上加值
    • e.g:{$inc:{sal:400}} 工资加400 即:+=400
  • db.collections.find({}).sort({sal:1,emp:-1})
    • 1升序 -1降序 上面的例子是:先按sal排序,相同情况下按emp再排序
  • skip() limit() sort() 可以以任意的顺序排序
  • 投影
    • 在查询时,可以在第二个参数的位置来设置查询结果
      • db.collections.find({},{name:1,_id:0}) 查询结果只显示name字段
  • 分页 每页显示10条 limit(每页显示的条数) skip()用于跳过指定数量的数据
    • db.collections.find().skip((页码-1)*每页显示的条数).limit(每页显示的条数)

  • 1.下载安装Mongoose
    • cnpm i mongoose --save
  • 2.在项目中引入mongoose
    • var mongoose = require (“mongoose”);
  • 3.连接MongoDB
    • mongoose.connect(‘mongodb://数据库的IP地址:端口号/数据库名’,{useNewUrlParser:true});
    • 如果端口号是27017,则可以省略不写
  • 监听MongoDB数据库的连接状态
    • 在mongoose对象中,有一个属性叫connection,该对象表示的就是数据库连接 通过监视该对象的状态,可以来监听数据库的连接与断开
    • 数据库连接成功:mongoose.connection.once(“open”,function(){});
    • 数据库连接失败:mongoose.connection.once(“close”,function(){});
  • 断开数据库连接
    • mongoose.disconnect();//一般不需要调用
    • Mongo数据库,一般情况下,只需要连接一次,连接一次以后,除非项目停止服务器关闭,否则连接一般不会断开
      -Document是Model的实例,通过Model查询到的结果都是Document

  • API文档中Model和Query的区别
    • Model适合简单查询,保存,修改和删除。如:增删改查一条或者几条数据
    • query适合复杂的查询。

      首先获取一个query:

      var query=personModel.find({});//当不带回调时会返回一个query对象

      query

      .skip(10)//跳过十行记录

      .limit(10)//查询十行记录

      .sort({_id:-1})//按id逆序排列

      .where(‘age’).gt(17).lt(66)//age字段大于17小于66

      .exec(function(err,data){

      //回调函数,do some thing

      });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值