mongodb笔记

基础

  • 安装不说了
  • 启动mongod --dbpath=D:\Mongodb\data(这个目录是数据库存放的目录)
  • 数据库 MongoDB的单个实例可以容纳多个独立的数据库,比如一个学生管理系统就可以对应一个数据库实例
  • 集合 数据库是由集合组成的,一个集合用来表示一个实体,如学生集合
  • 文档 集合是由文档组成的,一个文档表示一条记录,比如一位同学张三就是一个文档
  • 分布式的,随便加
  • 无需建库建表
  • show dbs 查看所有的数据库
  • use school解释:就算是没有这个数据库,也可以直接use
  • db 查看当前所在数据库
  • db.help() 查看帮助
  • show collections 查看当前db下的集合

插入 更新

- db.users.insert({id: 1, name: "lrj"})解释:db当前数据库,users集合(就算是没有users也可以直接插入),insert插入一个对象{id: 1, name: "lrj"}
- db.users.save({_id:fdsafd12f12,name: 'xxx'})查看_id对应的值是否相同,不同就更新
- 插入后,mongodb会自己生成一个_id,绝不重复的(因为分布式环境下,要保证_id不重复)
- db.getCollectionNames() 查看当前db下的集合包括system的
- db.createCollection('lessons')创建集合
- db.lessons.find() 查找
- db.users.update({_id:2},{name:'修改后的名字'},{multi:false,upsert:false})查找_id为2的文档,修改name属性,multi是否多条一起操作,upsert是否没找到就插入,这种是整条替换
- db.users.update({name:'lrj'},{$set:{age:10}},{multi:true});这种是只更新或者新增里面的某个属性
- db.users.update({name:'lrj'},{$unset:{age:2}},{multi:true}); 删除一个键值对(age必须是2)
- db.users.update({name:'lrj'},{$inc:{age:5}},{multi:true});取原来的age+5
- db.users.update({},{$set:{hobby:[]}},{multi:true})添加一个数组
- db.student.update({name:'张三'},{$push:{"hobbys":"smoking"}});   
- db.student.update({name:'lrj',hobbys:{$ne:"smoking"}},{$push:{"hobbys":"smoking"}});更新hobbys不等于somking的
- db.student.update({name:'lrj'},{$addToSet:{"hobbys":"smoking"}});与上一条等效,set不重复,有就不push了
- var hobbys = ["A",'B'];db.users.update({name:'lrj'},{$addToSet:{hobbys:{$each:hobbys}}});把数组中的元素逐个添加到集合中
- db.usrs.update({name:'lrj'},{$pop:{hobbys:1}});从数组中移除指定的索引中对应的元素(hobby是个数组哈)
- db.usrs.update({name:'lrj'},{$set:{"hobbys.0":"smoking2"}});更新hobby数组第0个元素
复制代码

删除

  • db.usrs.remove({name:"lrj"}{justOne: true})删除,这个默认是删所有,修改justOne决定删一条还是多条
  • db.dropDatabase()删除当前数据库
  • db.users.drop()删除users集合

查询

- db.users.find()返回所有
- db.users.find({},{name:1});空对象表示查询所有,后面表示只要name列,1表示显示,0表示不显示
- db.users.findOne({nane:"lrj"})查询到一条就返回
- db.users.find({age:{$in:[5,7,9,6]}})在5796中的一个
- db.users.find({age:{$nin:[5,7,9,6]}})不在5796中
- db.users.find({age:{$gt:5,$lt:10}})5<x<10----------$lte小于等于,$gte大于等于
- db.users.find({age:{$not:{$nin:[5,7,9,6]}}})5<x<10取反
- let result = db.student.find({friends:[ "A", "B", "C", "D" ]});按所有元素匹配--完全相等
- let result = db.student.find({friends:"A"});匹配一项 包含A的就可以
- let result = db.student.find({friends:{$all:['A',"B"]}});$all 必须同时包含A B
- let result = db.student.find({friends:{$in:['A',"B"]}});$in 或者关系 ,包含A或者B
- let result = db.student.find({friends:{$size:4}});$size 按数组的长度去匹配
- let result = db.student.find({friends:{$size:5}},{friends:{$slice:1}});对friends数组slice
- db.student.find({$where:"this.age>30"},{name:1,age:1});this表示当前每一个row,$where后面跟表达式
- db.students.find({_id:ObjectId("5adb666ecd738e9771638985")});(默认生成的_id值是个对象,我们就抄过来就行了)
- db.users.find().count() 查询结果集的条数
- db.users.skip(5).limit(10)跳过5条,选10条
- db.users.skip(5).limit(10).sort({age: 1})跳过5条,选10条,按age从小到大排,age:-1就是从大到小
- db.students.find({name:/^zhang/})正则查询
- db.students.find({$or:[{age:30},{age:50}]}或查询
- db.students.find({name:'zfpx',$or:[{age:30},{age:50}]})查询 name是zfpx 并且 age是30 或者 age是 50 的数据
复制代码

执行脚本

  • mongo test.js mongo可以执行js语法,只不过里面多了一些api

备份恢复

  • mongodump --host 127.0.0.1 --port 27017 --out ./backup --collection users --db students
  • db.users.drop();
  • mongorestore --host 127.0.0.1 --port 27017 ./backup

权限

  • 使用use admin进入我们的admin库才能创建用户
  • db.system.users.remove({user:'lrj'});删除用户
  • db.system.users.find();查询用户
db.createUser({
    user:'zfpx',
    pwd:'123456',
    customData:{
        name:'lrj',
        email:'fdsf@126.com',
        age:9
    },
    roles:[
        {
          role:'readWrite',
          db:'school'
        },
        'read'
    ]
});

复制代码
  • 启动的时候加入--auth,连上以后需要验证才能操作(假如是只有可读权限)
  • user admin
  • db.auth('uname','pwd')

建立索引

  • db.users.ensureIndex({name:1});升序。
  • 索引就是对插入的数据做一个排序,记录目标数据所在的位置,查询的时候就在有序的索引里找

转载于:https://juejin.im/post/5c495bbe6fb9a049d05e15d8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值