每篇半小时1天入门MongoDB——2.MongoDB环境变量配置和Shell操作

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:

上一篇:每篇半小时1天入门MongoDB——1.MongoDB介绍和安装

前言:为什么不是1天精通?大家都是成年人、明白人、聪明人,就不要像忽悠小孩子一样啦.......入门容易精通难,入门可能1天,精通则可能十年磨一剑才略有所成......

配置环境变量

Win10系统为例

右键单击“此电脑”——属性——高级系统设置——高级——环境变量,添加C:\Program Files\MongoDB\Server\3.0\bin;。注意:要以;隔开各种变量。

这样的话就可以直接在CMD命令窗口中输入mongo

表示环境变量设置成功,并已经连接到默认数据库test中。

我们可以输入mongod --help来查看相关的帮助信息

  View Code

 如果你不喜欢看英文可以网上搜中文帮助介绍。

mongoDB和关系型数据库的对比

  1. 关系数据的表的record必须保证拥有每一个field
  2. mongoDBde meiyige documentde key可以不一样
  3. 关系型数据库查询使用SQL
  4. mongoDB查询使用内置find函数——》基于BSON的特殊查询工具

Shell操作

  1. 创建一个数据库——use[databaseName]

    这时数据库并没有被正在创建,而是处于mongodb的一个预处理缓存池当中,如果你什么也不干就离开的花这个空数据库就会被删除。

  2. 查看所有数据库——show dbs

    > show dbs
    demo        0.078GB
    local       0.078GB
    myDatabase  0.078GB
    >

     这个时候我们看到myTest这个数据库是还没有创建的。

  3. 给指定数据库添加集合并且添加记录 ——db.[documentName].insert({...})

    > db.persons.insert({name:'yujie'})
    WriteResult({ "nInserted" : 1 })
    >

    执行上面语句后才真正创建数据库。

    复制代码
    > show dbs
    demo        0.078GB
    local       0.078GB
    myDatabase  0.078GB
    myTest      0.078GB
    >
    复制代码
  4. 查看数据库中的所有文档——show collections

    > show collections
    persons
    system.indexes
    >

    我们看到多了一个system.indexes文档,这是系统自动创建的一个索引文档,当插入记录的时候,自动创建了一个字段_id,并在这个字段上面创建了索引。我们来查看下索引:

    > db.system.indexes.find()
    { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "myTest.persons" }
    >
  5. 查看指定文档的数据——db.[documentName].find()&db.[documentName].findOne()

    在这之前,我们再来往persons文档中插入一条记录
    > db.persons.insert({name:'楚留香'})
    WriteResult({ "nInserted" : 1 })
    >

    查找persons文档中的所有记录

    > db.persons.find()
    { "_id" : ObjectId("593959250ab68d9cc7011a93"), "name" : "yujie" }
    { "_id" : ObjectId("59395c350ab68d9cc7011a94"), "name" : "楚留香" }
    >

    查找persons文档中的第一条记录

    > db.persons.findOne()
    { "_id" : ObjectId("593959250ab68d9cc7011a93"), "name" : "yujie" }
    >
  6. 更新文档数据——db.[documentName].update({查询条件},{更新内容})

    这里我们用到了一个update方法,我们来看下它的几个参数分别代表什么

    参数1:查询的条件

    参数2:更新的字段

    参数3:如果不存在则插入

    参数4:是否允许修改多条记录

    更新name为yujie的记录         

    > db.persons.update({name:'yujie'},{$set:{name:'玉杰'}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

    查看更新后的记录:

    > db.persons.find()
    { "_id" : ObjectId("593959250ab68d9cc7011a93"), "name" : "玉杰" }
    { "_id" : ObjectId("59395c350ab68d9cc7011a94"), "name" : "楚留香" }
  7. 删除文档中的数据——db.[documentName].remove({...})

    插入一条测试记录

    > db.persons.insert({name:'test'})})
    WriteResult({ "nInserted" : 1 })

    插入后:

    > db.persons.find()
    { "_id" : ObjectId("593959250ab68d9cc7011a93"), "name" : "玉杰" }
    { "_id" : ObjectId("59395c350ab68d9cc7011a94"), "name" : "楚留香" }
    { "_id" : ObjectId("593961530ab68d9cc7011a95"), "name" : "test" }
    >

    删除文档中的数据

    > db.persons.remove({name:'test'})
    WriteResult({ "nRemoved" : 1 })
    >

    删除后结果:

    > db.persons.find()
    { "_id" : ObjectId("593959250ab68d9cc7011a93"), "name" : "玉杰" }
    { "_id" : ObjectId("59395c350ab68d9cc7011a94"), "name" : "楚留香" }
    >
  8. 删除数据库——db.dropDatabase()

    查看所有数据库

    复制代码
    > show dbs
    demo        0.078GB
    foobar      0.078GB
    local       0.078GB
    myDatabase  0.078GB
    myTest      0.078GB
    >
    复制代码

    假设我要删除foobar数据库,先使用use foobar切换到foobar数据库,然后执行 db.dropDatabase(),执行结果如下:

    > db.dropDatabase()
    { "dropped" : "foobar", "ok" : 1 }
    >

    再次查看所有数据库:

    复制代码
    > show dbs
    demo        0.078GB
    local       0.078GB
    myDatabase  0.078GB
    myTest      0.078GB
    >
    复制代码
  9. Shell的help

    里面有所有的shell可以完成的命令帮助,全局的help数据库相关的db.help(),集合相关的db.[documentName].help()   

    db.help()

      View Code

    db.persons.help()

      View Code
  10. mongoDB的API

    http://api.mongodb.com/js/

  11. 数据库和集合命名规范

  1. 不能是空字符串
  2. 不得含有' '(空格)、,、$、/,\、和\O(空字符);
  3. 应全部小写
  4. 最多64个字节
  5. 数据库名不能与现有系统保留库同名,如admin,local,及config

数据库i命名为db-text这样的集合也是合法的,但是不能通过db.[documentName]得到了,要改为db.getCollection("documentName"),因为db-text会被当成是减。

mongoDB的shell内置javascript引擎可以直接执行js代码

function insert(object){
db.getCollection("db-text").insert(object)
}
insert({age:29})

shell可以用eval

> db.eval("return 'mongodb'")
WARNING: db.eval is deprecated
mongodb
>

BSON是JSON的扩展,他新增了诸如日期,浮点等JSON不支持的数据类型

更多命令

复制代码
db.AddUser(username,password)  添加用户
db.auth(usrename,password)     设置数据库连接验证
db.cloneDataBase(fromhost)     从目标服务器克隆一个数据库
db.commandHelp(name)           返回帮助命令
db.copyDatabase(fromdb,todb,fromhost)  复制数据库fromdb---源数据库名称,todb---目标数据库名称,fromhost---源数据库服务器地址
db.createCollection(name,{size:3333,capped:333,max:88888})  创建一个数据集,相当于一个表
db.currentOp()                 取消当前库的当前操作
db.dropDataBase()              删除当前数据库
db.eval(func,args)             运行服务器端代码
db.getCollection(cname)        取得一个数据集合,其他类似的用法:db['cname']
db.getCollenctionNames()       取得所有数据集合的名称列表
db.getLastError()              返回最后一个错误的提示消息
db.getLastErrorObj()           返回最后一个错误的对象
db.getMongo()                  取得当前服务器的连接对象
db.getMongo().setSlaveOk()     允许当前连接读取备库中的成员对象
db.getName()                   返回当操作数据库的名称
db.getPrevError()              返回上一个错误对象
db.getProfilingLevel()         
db.getReplicationInfo()        获得重复的数据
db.getSisterDB(name)           获取服务器上面的数据库
db.killOp()                    停止(杀死)在当前库的当前操作
db.printCollectionStats()      返回当前库的数据集状态
db.printReplicationInfo()
db.printSlaveReplicationInfo()
db.printShardingStatus()       返回当前数据库是否为共享数据库
db.removeUser(username)        删除用户
db.repairDatabase()            修复当前数据库
db.resetError()                
db.runCommand(cmdObj)          运行数据库命令. 如果cmdObj 是 string类型, 将它转换为 {cmdObj:1}格式的对象
db.setProfilingLevel(level)    0=off,1=slow,2=all
db.shutdownServer()            关闭当前服务程序
db.version()                   返回当前程序的版本信息
 
db.test.find({id:10})          返回test数据集ID=10的数据集
db.test.find({id:10}).count()  返回test数据集ID=10的数据总数
db.test.find({id:10}).limit(2) 返回test数据集ID=10的数据集从第二条开始的数据集
db.test.find({id:10}).skip(8)  返回test数据集ID=10的数据集从0到第八条的数据集
db.test.find({id:10}).limit(2).skip(8)  返回test数据集ID=1=的数据集从第二条到第八条的数据
db.test.find({id:10}).sort()   返回test数据集ID=10的排序数据集
db.test.findOne([query])       返回符合条件的一条数据
db.test.getDB()                返回此数据集所属的数据库名称
db.test.getIndexes()           返回些数据集的索引信息
db.test.group({key:...,initial:...,reduce:...[,cond:...]})
db.test.mapReduce(mayFunction,reduceFunction,<optional params>)
db.test.remove(query)                      在数据集中删除一条数据
db.test.renameCollection(newName)          重命名些数据集名称
db.test.save(obj)                          往数据集中插入一条数据
db.test.stats()                            返回此数据集的状态
db.test.storageSize()                      返回此数据集的存储大小
db.test.totalIndexSize()                   返回此数据集的索引文件大小
db.test.totalSize()                        返回些数据集的总大小
db.test.update(query,object[,upsert_bool]) 在此数据集中更新一条数据
db.test.validate()                         验证此数据集
db.test.getShardVersion()                  返回数据集共享版本号
复制代码

MongoDB语法与现有关系型数据库SQL语法比较

复制代码
MongoDB语法                <==>                   MySql语法
db.test.find({'name':'foobar'}) <==> select * from test where name='foobar'
db.test.find()                  <==> select * from test
db.test.find({'ID':10}).count() <==> select count(*) from test where ID=10
db.test.find().skip(10).limit(20)     <==> select * from test limit 10,20
db.test.find({'ID':{$in:[25,35,45]}}) <==> select * from test where ID in (25,35,45)
db.test.find().sort({'ID':-1})        <==> select * from test order by ID desc
db.test.distinct('name',{'ID':{$lt:20}})  <==> select distinct(name) from test where ID<20
db.test.group({key:{'name':true},cond:{'name':'foo'},reduce:function(obj,prev){prev.msum+=obj.marks;},initial:{msum:0}})  <==> select name,sum(marks) from test group by name
db.test.find('this.ID<20',{name:1})  <==> select name from test where ID<20
db.test.insert({'name':'foobar','age':25})<==>insert into test ('name','age') values('foobar',25)
db.test.remove({})                <==> delete * from test
db.test.remove({'age':20})        <==> delete test where age=20
db.test.remove({'age':{$lt:20}})  <==> elete test where age<20
db.test.remove({'age':{$lte:20}}) <==> delete test where age<=20
db.test.remove({'age':{$gt:20}})  <==> delete test where age>20
db.test.remove({'age':{$gte:20}}) <==> delete test where age>=20
db.test.remove({'age':{$ne:20}})  <==> delete test where age!=20
db.test.update({'name':'foobar'},{$set:{'age':36}}) <==> update test set age=36 where name='foobar'
db.test.update({'name':'foobar'},{$inc:{'age':3}})  <==> update test set age=age+3 where name='foobar'
复制代码

注意以上命令大小写敏感。


本文转自邹琼俊博客园博客,原文链接:http://www.cnblogs.com/jiekzou/p/6959638.html,如需转载请自行联系原作者

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
5月前
|
NoSQL MongoDB
MongoDB入门-sort和投影
这篇文章介绍了MongoDB中的排序(sort)和投影(projection)操作,通过示例代码展示了如何使用这些功能来控制查询结果的排序顺序和返回的字段。
50 3
MongoDB入门-sort和投影
|
5月前
|
NoSQL MongoDB
MongoDB入门-MongoDB的CURD语句练习
这篇文章提供了MongoDB的CURD操作的练习,涵盖了插入、查询、更新和删除数据的基本命令,并通过具体示例展示了如何在MongoDB中执行这些操作。
53 2
|
3月前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
110 2
|
4月前
|
存储 NoSQL MongoDB
MongoDB入门级别教程全(Windows版,保姆级教程)
一份全面的MongoDB入门级教程,包括在Windows系统上安装MongoDB、使用MongoDB Shell和Compass GUI进行数据库操作,以及MongoDB的基本数据类型和查询技巧。
296 2
MongoDB入门级别教程全(Windows版,保姆级教程)
|
4月前
|
分布式计算 Hadoop Shell
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
112 4
|
4月前
|
NoSQL Shell MongoDB
MongoDB Shell
10月更文挑战第11天
51 0
|
5月前
|
存储 NoSQL Shell
02 MongoDB数据类型、重要概念以及shell常用指令
文章详细解释了MongoDB中的数据类型、重要概念,并提供了常用的MongoDB Shell操作指令,帮助用户更好地管理和操作MongoDB数据库。
73 0
02 MongoDB数据类型、重要概念以及shell常用指令
|
6月前
|
分布式计算 资源调度 Hadoop
Hadoop入门基础(五):Hadoop 常用 Shell 命令一网打尽,提升你的大数据技能!
Hadoop入门基础(五):Hadoop 常用 Shell 命令一网打尽,提升你的大数据技能!
|
6月前
|
NoSQL BI 数据处理
【超实用攻略】MongoDB 聚合框架:从入门到精通,带你解锁数据处理新姿势!
【8月更文挑战第24天】MongoDB是一款以其灵活性和高性能闻名的NoSQL数据库。其强大的聚合框架采用管道式处理,允许用户定义多个数据处理阶段如过滤、分组等。本文通过示例数据库`orders`和`products`,演示如何利用聚合框架计算各产品的总销售额。示例代码展示了使用`$lookup`连接两集合、`$unwind`打平数组及`$group`按产品ID分组并计算总销售额的过程。这突显了聚合框架处理复杂查询的强大能力,是进行数据分析和报表生成的理想选择。
73 3
|
5月前
|
存储 Ubuntu Shell
shell 用法入门
本文档详细介绍了Shell脚本的基础知识,包括基本写法、变量定义与使用、命令置换、环境变量、数组操作、算术运算、输入输出处理、控制语句及循环结构等内容。文档还提供了丰富的示例代码,帮助读者更好地理解和掌握Shell编程技巧。此外,还介绍了如何使用`if`语句进行条件判断、`case`语句进行模式匹配以及`while`、`for`循环等控制结构。最后,文档还涵盖了函数定义与调用的方法。适合初学者和有一定基础的开发者参考学习。