mongoDB基础

一 mongoDB基本介绍

        mongodb是一个nosql数据库,它有高性能、无模式、文档型的特点。他是nosql数据库中功能最丰富,最像关系数据库的。      

        实例:系统上运行的mongodb的进程,类似于mysql实例;        

        库:每个数据库都是独立的,有自己的用户,权限,独立存储集合,类似于mysql的库;

        集合:由一组文档构成,类似于mysql的表;

        文档mongodb数据库的最小数据集,是由多个键值对有序组合的数据单元,类似于mysql的数据记录;

MongoDb作为nosql数据库,它具有以下特性:

        1、面向集合文档存储,适合存储json形式的数据;

        2、格式自由,数据格式不固定,数据结构发生变更的同时不会影响程序运行;

        3、面向对象的sql查询语句,基本涵盖关系型数据库的所有查询语句;

        4、有索引的支持,查询效率更快;

        5、支持复制和自动故障转移;

        6、可以使用分片集群提升查询性能
        针对以上的特性,我们可以在以下场景中采用mongdb数据库:1、应用不需要事务(这一条是最重要的,如果应用的事务的依赖很强,是不能选择该数据库的);2、数据模型无法确定,经常发生变更;3、应用的qps达到2000以上;4、应用存储的数据很大,达到TB级别以上;5、应用需要大量的地理位置查询或者文本查询。因此mongodb使用与游戏,社交,物流,物联网,视频直播这些场景。

二 mongoDB的安装与使用

1 下载MongoDB

        官方下载地址:https://www.mongodb.com/download-center/communit

        这里的安装是以linux为例的,因为实际生产场景大部分都是在linux进行部署。接下来我看介绍一下mongdb的安装步骤;

        1、先进入mongodb的官网MongoDB下载,选择要下载的版本以及系统,需要注意的是,在安装mongodb之前需要先准备好jdk的环境变量,选择好要下载的版本以后,点击copy link,在linux系统中执行以下命令;

 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.11.tgz

2 解压安装

2.1解压

tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgz

2.2创建目录/usr/local/mongo,并将解压完的mongodb目录移动到/usr/local/mongo

mkdir -p /usr/local/mongo
mv mongodb-linux-x86_64-rhel70-4.2.1/* /usr/local/mongo/ 

2.3切到/usr/local/mongo目录下,创建目录

mkdir -p data/db        #数据库目录
mkdir -p logs           #日志目录
mkdir -p conf           #配置文件目录
mkdir -p pids           #进程描述文件目录

创建好的目录如下:
 

 2.4在conf目录,增加配置文件mongo.conf

vi /usr/local/mongo/conf/mongo.conf

#数据保存路径
dbpath=/usr/local/mongo/data/db/
#日志保存路径
logpath=/usr/local/mongo/logs/mongo.log
#进程描述文件
pidfilepath=/usr/local/mongo/pids/mongo.pid
#日志追加写入
logappend=true
bind_ip_all=true
#mongo默认端口
port=27017
#操作日志容量
oplogSize=10000
#开启子进程
fork=true 

2.5通过配置文件启动mongo服务端

/usr/local/mongo/bin/mongod -f /usr/local/mongo/conf/mongo.conf 

 

2.6启动mongo客户端

/usr/local/mongo/bin/mongo --host 127.0.0.1 --port 27017 

        mongo在创建完成以后会默认存在admin,config,local这三个数据库,其中admin中存储的是mongodb的用户、角色等信息;config中存储的是分片集群基础信息;local中主要存储的是副本集的元数据。

MongoDB基本操作及增删改查

1.基本操作

1.1登录数据库

mogo

1.2查看数据库

show databases;

 1.3选择数据库

use 数据库名

 

如果切该数据库不存在,例如use admin2,那么会隐式创建这个数据库。 

use admin2

如果切换到一个没有的数据库,例如use admin2,那么会隐式创建这个数据库。

 1.4查看集合

show collections

 在这里插入图片描述

1.5创建集合

db.createCollection('集合名')

1.6删除集合

 db.集合名.drop()

 在这里插入图片描述

 1.7删除数据库

        通过use语法选择数据
        通过db.dropDataBase()删除数据库

在这里插入图片描述

2.增删改查

2.1添加数据

db.集合名.insert(JSON数据)

如果集合存在,那么直接插入数据。如果集合不存在,那么会隐式创建。

示例:在test2数据库的c1集合中插入数据(姓名叫webopenfather年龄18岁)

use test2

db.c1.insert({"username":"webopenfather","age":"18"})

  • 数据库和集合不存在都隐式创建
  • mongodb会给每条数据增加一个全球唯一的_id

 _id键的组成

自己增加_id
可以,只需要给插入的JSON数据增加_id键即可覆盖(但实战强烈不推荐) 

 db.c1.insert({"_id":"1","uname":"webopenfather", "age":18})

 一次性插入多条数据
传递数据,数组中写一个个JSON数据即可

 db.c1.insert([

        {"username":"z3","age":"18"},

        {"username":"l4","age":"18"},

         {"username":"w5","age":"18"}

])

快速插入10条数据
由于mongodb底层使用JS引擎实现的,所以支持部分js语法。因此:可以写for循环

for (var i=1; i<=10; i++) {    

        db.c2.insert({uanme: "a"+i, age: i})

}

2.2查询文档

db.集合名.find(条件[,查询的列])

条件写法
查询所有的数据{}或者不写
查询age=6的数据{age:6}
既要age=6又要性别=男{age:6,sex:‘男’}
查询的列(可选参数)写法
查询全部列(字段)不写
只显示age列(字段){age:1}
除了age列(字段)都显示{age:0}

其他语法

运算符作用
$gt大于
$gte大于等于
$lt小于
$lte小于等于
$ne不等于
$in表示查询某一个字段在某一个范围中的所有文档
$nin表示查询某一个字段不在某一个范围内的所有文档

3实例练习
3.1查询所有数据

db.c1.find()

 3.2只查看uname列

db.c1.find({},{uname:1})

 3.3除了uname列都查看

db.c1.find({},{uname:0})

3.5查询age大于5的数据

db.c1.find({

        age:{$gt:5}

})

 

3.6查询年龄是5岁、8岁、10岁的数据

db.c2.find({

        age:{$in:[5,8,10]}

})

 3.7只看年龄列

db.c2.find({},{age:1})

3.8只看年龄以外的列

db.c2.find({},{age:0})

 4.修改文档

db.集合名.update(条件,新数据[是否新增,是否修改多条,])

新数据此数据需要使用修改器,如果不使用,那么会将新数据替换原来的数据。

db.集合名.update(条件,{修改器:{键:值}}[是否新增,是否修改多条,])

修改器作用

        inc递增

        rename重命名列

        set修改列值

        unset删除列

是否新增
指条件匹配不到数据则插入(true是插入,false否不插入默认)
db.c3.update({uname:"zs30"},{$set:{age:30}},true)

是否修改多条
指将匹配成功的数据都修改(true是,false否默认)
db.c3.update({uname:"zs2"},{$set:{age:30}},false,true)

实例练习
准备工作

use test2;
for(var i = 1; i<= 10; i++){
    db.c3.insert( {"uname":"zs"+i,"age":i} );
}

4.1将{uname:"zs1"}改为{uname:"zs2"} 

db.c3.update({"uname":"zs1"},{$set:{"uname":"zs2"}})

4.2给{uname:"zs10"}的年龄加2岁或减2

db.c3.update({"uname":"zs10"},{$inc:{age:2}}) 

递减只需要将2改为-2即可。

5.删除文档

db.集合名.remove(条件[,是否删除一条])

是否删除一条
 true:是(删除的数据为第一条)

db.c3.find()

db.c3.remove({},true)

db.c3.find()

 false:否

db.c3.find()

db.c3.remove({"uname":"zs3"})

db.c3.find()

 6总结

6.1增

db.集合名.insert(JSON数据)

6.2删

db.集合名.remove(条件 [,是否删除一条t rue是 false否 --默认])

也就是默认删除多条

 6.3改

db.集合名.update(条件, 新数据  [,是否新增,是否修改多条])

升级语法db.集合名.update(条件,{修改器:{键:值}})

 6.4查

db.集合名.find(条件 [,查询的列])

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB基础语法包括使用条件操作符进行查询。其中包括使用$or操作符实现逻辑或查询。语法格式如下: ``` db.collection.find({ $or: [ { key1: value1 }, { key2: value2 } ] }) ``` 这个查询语句表示在集合中查找满足key1等于value1或key2等于value2的文档。 另外,还可以使用比较操作符进行条件查询。比如使用$lt操作符进行小于操作,$lte进行小于等于操作。例如: ``` db.collection.find({ likes: { $lt: 150 } }) ``` 这个查询语句表示在集合中查找likes字段小于150的文档。 此外,还可以结合多个条件进行查询,使用$or操作符和其他条件操作符一起使用。例如: ``` db.collection.find({ "likes": { $gt: 50 }, $or: [ { "by": "菜鸟教程" }, { "title": "MongoDB 教程" } ] }) ``` 这个查询语句表示在集合中查找likes大于50,并且by等于"菜鸟教程"或者title等于"MongoDB 教程"的文档。 以上就是MongoDB基础语法的简单介绍。根据需要,可以使用不同的条件操作符组合查询条件来满足特定的需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [20201207MongoDB - 创建数据库/删除数据库/创建集合/删除集合/插入文档/更新文档/删除文档/查询文档/条件...](https://blog.csdn.net/weixin_36810906/article/details/110792096)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值