mongoDB学习笔记(正在完善中)

1. 打开mongo shell

    $ mongo

2. 添加超级管理员账户

    > use admin  切换到admin数据库

    > db.createUser({user: 'myadmin', pwd: 'myadmin', roles:[{role: 'userAdminAnyDatabase', db:'admin'}]})

3. 验证用户   

    > db.auth(username, password)

4. 执行查看命令(执行下面命令必须验证用户)

    > show users   查看用户是否创建成功【必须使用管理员账户】

    > show dbs    查看数据库列表

    > show collections   查看集合列表

mongodb 有哪些权限:

read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限

 

注意:此时新创建的数据库并不在列表中,必须要插入至少一条数据才会显示

插入数据之前,需要给新的数据库添加管理用户

db.createUser({user: 'test', pwd: 'test', roles:[{role: 'readWrite', db: 'wll'}]})

注意:如果已经验证过用户,是不能直接验证其他用户,否则会报错:logical sessions can't have multiple authenticated usersmongDB不允许一次会话认证多个用户

解决方案:退出当前shell窗口,或者新建shell窗口,重新认证auth认证登录

  1. 重新登录mongoDB后,
  2. 切换到目标数据库 use wll
  3. 验证用户  db.auth(‘test’, ‘test’)
  4. 最后就可以正常执行命令  

 

数据库操作

    选择和创建数据库  use 数据库名称

    > use database_name

    > use wll

    注意:如果数据库不存在则自动创建

查看有权限查看的所有的数据库命令: show dbs 或者  show databases

查看当前正在使用的数据库命令  db

mongoDB中默认的数据库为test

删除数据库  db.dropDatabase()

特殊作用的数据库:

admin

local

config

数据库名可以是满足以下条件的任意UTF-8字符串。
不能是空字符串(“”)。
不得含有’ '(空格)、.、$、/、\和\0 (空字符)。
应全部小写。
最多64字节。

 

集合操作

显示创建  db.createCollection(name)

隐式创建: 当向一个集合中插入一个文档的时候,如果集合不创建则会自 动创建集合

查看当前集合中的所有集合  show collections 或  show tables

集合的删除: db.collection.drop() 或 db.集合.drop()

集合的命名规范:

1. 集合名不能是空字符串""。

2. 集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。

3. 集合名不能以"system."开头,这是为系统集合保留的前缀。

4. 用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。

 

查询语句

以集合movie为例进行查询操作

查询所有记录 db.movie.find();

db.userInfo.find({"age": 22});  age=22

db.userInfo.find({age: {$gt: 22}});   age>22

db.userInfo.find({age: {$gte: 25}});

db.userInfo.find({age: {$gte: 23, $lte: 25}});   age>=23 and age <= 25

db.userInfo.find({age: {$ne: 25}});

 

查询 name 中包含 mongo 的数据 模糊查询用于搜索

db.userInfo.find({name: /mongo/});

查询指定列 name、age 数据, age > 25

db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});

 

排序sort

按照年龄排序 1 升序 -1 降序
升序:db.userInfo.find().sort({age: 1});

 

Limit 限制返回条数

查询前 5 条数据

db.userInfo.find().limit(5);

查询 10 条以后的数据

db.userInfo.find().skip(10);

查询在 6-10条 之间的数据

db.userInfo.find().limit(10).skip(5);

or 查询

db.userInfo.find({$or: [{age: 22}, {age: 25}]});

and 查询 

name = zhangsan, age = 22 的数据

db.userInfo.find({name: 'zhangsan', age: 22});

统计数量

db.userInfo.find({age: {$gte: 25}}).count();

 

 

文档基本CRUD

文档的插入

(1)单个文档插入  insertsave  db.collection.insert({...})

(2)批量插入   db.collection.insertMany( [ <document 1> , <document 2>, … ], { writeConcern: , ordered: } )

测试用例:

db.comment.insertMany([ {"_id":"1","articleid":"100001","content":"我们不应该把清晨浪费在手机上,健康很重要,一杯温水幸福你我 他。","userid":"1002","nickname":"相忘于江湖","createdatetime":new Date("2019-08- 05T22:08:15.522Z"),"likenum":NumberInt(1000),"state":"1"}, {"_id":"2","articleid":"100001","content":"我夏天空腹喝凉开水,冬天喝温开水","userid":"1005","nickname":"伊人憔 悴","createdatetime":new Date("2019-08-05T23:58:51.485Z"),"likenum":NumberInt(888),"state":"1"}, {"_id":"3","articleid":"100001","content":"我一直喝凉开水,冬天夏天都喝。","userid":"1004","nickname":"杰克船 长","createdatetime":new Date("2019-08-06T01:05:06.321Z"),"likenum":NumberInt(666),"state":"1"}, {"_id":"4","articleid":"100001","content":"专家说不能空腹吃饭,影响健康。","userid":"1003","nickname":"凯 撒","createdatetime":new Date("2019-08-06T08:18:35.288Z"),"likenum":NumberInt(2000),"state":"1"}, {"_id":"5","articleid":"100001","content":"研究表明,刚烧开的水千万不能喝,因为烫 嘴。","userid":"1003","nickname":"凯撒","createdatetime":new Date("2019-08- 06T11:01:02.521Z"),"likenum":NumberInt(3000),"state":"1"} ]);

 

删除

1. 删除文档   db.集合名称.remove(条件)

 删除_id=1的记录  db.comment.remove({_id:1})

2. 删除集合  db.collection.drop()

3. 删除数据库 db.dropDatabase()   删除当前数据库

 

文档的分页查询

(1)统计查询 count

      统计所有记录

      按条件统计记录数

分页列表查询
可以使用limit()方法来读取指定数量的数据,使用skip()方法来跳过指定数量的数据。 db.comment.find().limit(3)

(2)排序查询

sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。db.comments.find().sort({userid:-1, likenum:1})

注意: skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit(),和命令编写顺序无关。

 

参考博客

https://blog.csdn.net/qq_41767116/article/details/125586683

https://www.cnblogs.com/0722tian/p/16461446.html

https://blog.csdn.net/qq_44300280/article/details/123937014

posted @   向技术致敬  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示