MongoDB简单学习总结

1.定义

一个非关系型数据库,也称为文档型数据库。虽然是非关系数据库,但是其实在使用过程,我觉得这玩意是最像关系型数据库的nosql了,因为相对于另一种常见的非关系数据库redis来说,至少它还有点关系型数据库的影子。

2.特点

①高性能:支持嵌入式模型,减少数据库系统上的IO驱动,当然也支持索引。

②高可用性:副本集(replica set)使用的是n个mongod节点,构建具备自动的容错功能(auto-failover),自动恢复的(auto-recovery)的高可用方案。

③高扩展性:提供水平扩展性,支持分片将数据分布在一组集群的机器上。

④丰富的查询支持:常见的crud,以及数据聚合、文本搜索和地理空间查询等。

⑤动态模式,结构灵活。

3.应用场景

适用于数据量大、写入操作频繁、对事务性要求不高、数据模型未完全确定需求可能改变、大量地理位置查询、文本查询。

4.结构

对于其支持的数据结构,称为BSON,和JSON不能说很像,只能说一模一样,不过BSON有JSON没有的一些数据类型,如Date和BinData类型。

4.1与mysql对比

SQLMongoDB解释
databasedatabase
tablecollection
rowdocument
table joins表连接,MongoDB不支持
嵌入文档MongoDB通过嵌入式文档来替代多表连接
primary keyprimary keyMongoDB自动将_id字段设置为主键

5.数据模型

6.基本crud操作

6.1查询

db.collection.find(<query>, [projection])
query:筛选条件
projection:投影

//示例
>db.student.find({user_id:"1003"},{user_id:1,nickname:1})
>{ "_id" : "4", "user_id" : "1003", "nickname" : "EMT" }
//如果不想显示主键,则加上_id,如下

>db.student.find({user_id:"1003"},{user_id:1,nickname:1,_id:0})

//至于还有什么findOne,findMany就不多说了,懂点英语,就知道就是字面意思

6.2插入

db.collection.insert(document);

document:要插入到集合中的文档或文档数组。(json格式)

//当然里面还可以放其他参数,但是可能用得比较少,更详细的自己看官方文档即可

//其实insert就能实现批量和单个插入了,insertMany和insertOne也是字面意思。

6.3修改

//两种

//覆盖原文档
>db.student.update({_id:"1"},{nickname:"emt"})
//这个会将id为1的原文档直接覆盖掉

//仅修改指定的值,不完全覆盖原来的
>db.student.update({_id:"1"},{$set:{nickname:"emt"}})

//默认只更新一条数据,如果要批量更新,需要加上multi参数
>db.student.update({sex:"1"},{$set:{nickname:"emt"}},{multi:true})

//当然updateOne()和updateMany()还是字面意思

6.4删除

删除在实际中用得少,一般都是逻辑删除

db.collection.remove(query)
query:筛选条件

7.其他常见查询方式

7.1分页查询

//查总数
db.collection.count(query)
//查内容
>db.collection.find(query).skip(start).limit(size)
start:表示当前页第一条在总条数里面的索引位置,假如一个场景是一页10条,那么第二页的第一条索引是10(因为索引是从0开始,前十条是0~9),所有查询第二页的数据时start=10。
size:页大小

7.2排序查询

>db.collection.find().sort({KEY:n})
key:有排序要求的字段名
n:为1代表升序,-1代表降序

7.3比较查询

db.collection.find({ "field" : { $gt: value }}) // 大于: field > value
db.collection.find({ "field" : { $lt: value }}) // 小于: field < value
db.collection.find({ "field" : { $gte: value }}) // 大于等于: field >= value
db.collection.find({ "field" : { $lte: value }}) // 小于等于: field <= value
db.collection.find({ "field" : { $ne: value }}) // 不等于: field != value

7.4包含查询

//查询性别为男或女的学生
>db.student.find({sex:{$in:["0","1"]}})

//查询性别不男不女的学生(人妖了属于是)
>db.student.find({sex:{$nin:["0","1"]}})

7.5条件连接查询

$and:[ { },{ },{ } ]
$or:[ { },{ },{ } ]

//例如,查询体重小于60kg的男学生
>db.student.find({$and:[ {sex:"1"} ,{weight:{$lt:60} }]})

8.索引

#创建索引
>db.collection.createIndex(keys, options)
keys:实则{key:n},其中key是字段,n为1表示升序索引,-1表示降序索引。
options:参数较多,大部分用得少,详细的可以看官方文档

#删除某个索引
>db.collection.dropIndex(keys)
keys:同上

#删除集合中所有索引
>db.collection.dropIndexes()

#获取集合中所有索引
>db.collection.getIndexes()

索引包括单字段索引、符合索引、其他(地理空间索引(Geospatial Index)、文本索引(Text Indexes)、哈希索引(Hashed Indexes)),括号中的索引具体可查阅相关资料,不多赘述。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值