专栏首页进击的全栈mongodb基础应用
原创

mongodb基础应用

  • Mac OSX 平台安装 MongoDB
  • MongoDB权限验证
  • MongoDB常用操作指令

一、Mac OSX 平台安装 MongoDB

(一)安装MongoDB

使用 OSX 的 brew 来安装 mongodb:

brew install mongodb
(二)运行 MongoDB

1、首先我们创建一个数据库存储目录 /data/db:

sudo mkdir -p /data/db

2、启动 mongodb,默认数据库目录即为 /data/db:

sudo mongod

3、再打开一个终端进入执行以下命令:

// 这个路径可以通过安装时候的信息找到
cd /usr/local/Cellar/mongodb/4.0.3_1/bin
./mongo

二、MongoDB权限验证

为了保证mongodb数据库的安全性,需要给数据库设置权限验证。

启用 MongoDB 用户认证的步骤:
  • 如果 admin 中没有用户,则必须在 admin中添加用户
  • 在要启用认证的数据库中创建对应的用户
  • 以认证方式,即 –auth 参数的方式启动 MongoDB 数据库
  • 用数据库对应的用户登录数据库,比如:mongo 127.0.0.1/test -utest_user -ppasword
设置用户并验证
# 1.进入mongo环境
> ./mongo

# 2.切换到 'admin' 数据库
> use admin

# 3.给admin设置用户
# user: 用户名 
# pwd: 用户密码
# roles: 用来设置用户的权限,比如读,读写,写等等
> db.createUser({user: 'root', pwd: '123456', roles: ['root']})

# 4.验证该用户 'db.auth(用户名,用户密码)'
> db.auth('root', '123456')
# 如果返回 '1'表示验证成功, 如果是 '0' 表示验证失败

# 5.自定义数据库,并添加用户
# a.创建 'example' 数据库
> use example

# b.创建用户
> db.createUser({user: 'james', pwd: '123456', roles: [{role: 'readWrite'}]})

# c.验证该用户
> db.auth('james', '123456')
# 如果返回 '1'表示验证成功, 如果是 '0' 表示验证失败
role里的角色可以选
Built-In Roles(内置角色):
    1. 数据库用户角色:read、readWrite;
    2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
    3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
    4. 备份恢复角色:backup、restore;
    5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
    6. 超级用户角色:root  
    // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
    7. 内部角色:__system
具体角色
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
查看所有帐号
db.system.users.find().pretty()

如果修改了用户权限,则需要在用户所在的数据库再次认证才能生效。

三、MongoDB常用操作指令

(一)操作数据库
1. 使用db查看当前操作的数据库
> db
2. 创建数据库

MongoDB 用 use + 数据库名称(use DATABASE_NAME) 的方式来创建数据库。use 会创建一个新的数据库,如果该数据库存在,则返回这个数据库。例如:创建一个名为“test”的数据库:

> use test
3. 检查数据库列表
show dbs

至少插入一个文档才会显示新添加的数据库。

注:在 MongoDB 中,默认的数据库是 test,如果你没有创建任何数据库,那么集合就会保存在 test 数据库中。

4. 删除数据库
# 首先使用show dbs看一下数据库列表:
> show dbs
# 删除数据库test:
> use test
> db.dropDatabase()
# 再看一下数据库列表:
> show dbs
(二)集合操作
1. 创建集合

除了以下方式,在插入文档的时候,也会自动创建集合

# name 是集合名称,是一个字符串;options 是可选项,是一个文档,指定内存大小和索引等选项
> db.createCollection(name, options)

注:undefined1.如果 collection 达到最大存储限制(size)之前达到最大文档数量(max)会删除旧文档。

2.MongoDB 会先检查size值,然后再检查max值

2. 显示当前操作数据库内的所有集合
> show collections
3. 删除集合
> db.COLLECTION_NAME.drop()
(三)文档操作
1. 文档操作
# document是一个对象
> db.collection_name.insert(document)
2. 更新文档

MongoDB 用 update() 或者 save() 更新集合中的文档

2.1、update()

update() 更新已经存在文档的值

> db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA, UPDATED_DATA)

上面范例只会更新第一条发现的文档,若想更新全部发现的文档,则需要用 multi:true ,具体写法如下

> db.user.update({'name':'user1'},{$set:{'name':'user2'}},{multi:true})

2.2、save()

save() 方法通过传入的文档来替换已有文档

> db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA})
3. 删除文档
> db.COLLECTION_NAME.remove(DELLETION_CRITTERIA,justOne)

justOne 如果设为 true 或 1,则只删除一个文档。 如果想删除所有记录,可以这样写:

> db.user.remove({})
(四)文档查询

可以用 find() 方法查询全部文档,可以用 findOne() 查询第一个文档,还可以根据 条件操作符 和 $type操作符 查询满足条件的文档。

> db.user.find()
# 如果想要格式化显示查询结果,需要用 pretty() 方法
> db.COLLECTION_NAME.find().pretty()
条件操作符

操作

格式

范例

等于

{<key>:<value>}

db.user.find({"name":"liruihuan"}).pretty()

小于

{<key>:{$lt:<value>}}

db.user.find({"age":{$lt:18}}).pretty()

小于或等于

{<key>:{$lte:<value>}}

db.user.find({"age":{$lte:18}}).pretty()

大于

{<key>:{$gt:<value>}}

db.user.find({"age":{$gt:18}}).pretty()

大于或等于

{<key>:{$gte:<value>}}

db.user.find({"age":{$gte:18}}).pretty()

不等于

{<key>:{$ne:<value>}}

db.user.find({"age":{$ne:18}}).pretty()

MongoDB 中的 and 条件

MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,MongoDB 会把这些键作为 and 条件,及常规 SQL 的 AND 条件。

> db.collection.find({key1:value1, key2:value2}).pretty()
MongoDB 中的 or 条件

MongoDB 中 or 条件用 $or关键字

> db.collection.find({$or: [{key1:value1},{key2:value2}]}).pretty()

本文参考了网上多篇文章,侵删。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • mongodb用mongoose得到的对象不能增加属性解决

    上述两个models的关系可以看出:一个用户对应一个购物车(cartList),一个购物车有多个商品对象

    wfaceboss
  • flask系列四之SQLAlchemy

    (2)ORM(Object Relationship Mapping):模型关系映射

    wfaceboss
  • flask系列一之环境搭建包安装

    参考:http://www.cnblogs.com/bfwbfw/p/7995245.html

    wfaceboss
  • Oceanus:美团点评HTTP流量定制化路由的实践

    Oceanus是美团基础架构部研发的统一HTTP服务治理框架,基于Nginx和ngx_lua扩展,主要提供服务注册与发现、动态负载均衡、可视化管理、定制化路由、...

    美团技术团队
  • 删库后,除了跑路还能怎么办?

    当年悟空学艺于菩提祖师门下,老师遣他下山,悟空觉得自己蒙受师傅传授大恩,还没有报答。菩提祖师就说:不要提什么报答之恩,只要你日后闯出祸来不把为师说出来就行了。

    良月柒
  • 初探设计模式5:Spring涉及到的9种设计模式

    设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆。

    黄小斜
  • MySQL 常用命令 原

    (adsbygoogle = window.adsbygoogle || []).push({});

    tianyawhl
  • flask系列五之flask_script

    若只是增加字段,只需在model中添加字段然后按顺序执行上述的(2)--(3)命令即可更新数据库的字段。

    wfaceboss
  • mongodb与mongodb可视化工具adminMongo结合使用

    https://www.mongodb.com/download-center#community

    wfaceboss
  • 视频直播系统用户信息更新后私信服务该如何进行资料更新

    视频直播系统一定会用到推送功能,对于视频直播软件开发而言,比较简便的私信功能实现方式就是借助于三方服务商提供的SDK。有时我们在直播平台运营过程中,会遇到这样一...

    q3557873521

扫码关注云+社区

领取腾讯云代金券