mongodb源码解析 java_源码时代java课堂:Mongodb进阶之Mongodb使用

1. MongoDB数据的使用

2.1 mongodb中的概念

Mongodb因为是最像关系型数据库的非关系型数据库,所以我们可以对照着mysql来认识Mongodb中的一些概念。

9acbe9cd035e

image

9acbe9cd035e

image

2.2 mongodb常用语法

1、显示库列表:show dbs

2、使用库:use dbname

注意:

1、该命令可隐式创建数据库,即如果数据库不存在则创建数据库,否则切换到指定的数据库。

2、如果show dbs没有出现新创建的数据库,则往里面存入一条数据。如:

db.mydb.insert({name:"tom",age:18,gender:1,address:"北京",isDelete:0})

显示集合列表 show collections

创建表 db.createCollection(name, options)

Name :集合名称

Optinons:指定配置,如内存大小等

查询集合 db.collectionName.find()

条件查询 db.tablename.find({“age”:18})

排序 db.COLLECTION_NAME.find().sort({KEY:1})

注意:使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

分页 db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

Limit() 是要读取几条 相当于pageSize

Skip()是要跳过几条 (currentpage-1)*pageSize

SELECT * FROM emp limit (currentpage-1)*pageSize,pageSize

模糊查询

db.collectionName.find({fieldName: /A/})

类似于sql:SELECT * FROM UserInfo WHERE userName LIKE "%A%"

db.collectionName.find({fieldName: /^A/})

类似于sql:SELECT * FROM UserInfo WHERE userName LIKE "A%"

还可以利用正则表达式进行模糊查询:

db.collectionName.find({fieldName:{$regex:"runoob"}})

等价于

db.collectionName.find({fieldName:/runoob/})

插入文档 db.collectionName.insert({name:”tom”,age:18})

注意:该命令可隐式创建表,即如果没有该表则新建后插入该数据,如果该表存在,则往表里插入该数据。

修改文档 db.collection.update({query},{update})

实例: db.collectionName.update({“_id”:1},{$set:{“stuName”:”李四”}})

注意:

①query : update的查询条件,类似sql update查询内where后面的。

②update : update的对象和一些更新的操作符(如

math?formula=%2Cinc...)等,也可以理解为sql update查询内set后面的

③upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

④multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

12、删除文档 db.collection.remove(,{justOne: ,writeConcern: })

注意:

①query :(可选)删除的文档的条件。

②justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。

③writeConcern :(可选)抛出异常的级别。

2.3 mongodb高级查询

2.3.1 条件查询

1 >(

math?formula=gt)%20%3C(lt) >=(

math?formula=gte)%20%3C%3D(lte) 操作符

db.collectionName.find({field : {$gt : 100}}

db.t_user.find({“age”: {$lt : 18}}

等价于sql的

Select * from tablename where columnname > 100

2 使用 () 查询 -

math?formula=lt%20%E5%92%8Cgt

db.collectionName.find({field : {

math?formula=lt%20%3A200%2Cgt : 100}})

db.t_user.find({“age”: {

math?formula=lt%20%3A%2018%2Cgt:20}}

等价于sql的

Select * from tableName where columnName < 200 and colunmName > 100

2.3.2 聚合

聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的分组方法 group by

1 基本语法

db.collectionName.aggregate(AGGREGATE_OPERATION)

2 实例

db.collectionName.aggregate([{

math?formula=group%3A%7B_id%3A%22field",”别名”:{$sum:1}}}])

Db.t_user.aggregate([{

math?formula=group%3A%7B%E2%80%9Csex%E2%80%9D%3A%22field",num_tutorial:{$sum:1}}}])

等价于sql的

Select columnName,count(*) a count1 from tableName where age > 18 grop by columnName

9acbe9cd035e

image

3 聚合中常用的几个操作

9acbe9cd035e

image

4 管道

聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。

db.collectionName.aggregate( [

{ $match : { “age”: { $gt : 18 } } },

{ $group: { _id: “sex”, count: { $sum: 1 } } }

] );

math?formula=match%E7%94%A8%E4%BA%8E%E8%8E%B7%E5%8F%96%E5%AD%97%E6%AE%B5%E4%B8%AD%E5%A4%A7%E4%BA%8E70%E5%B0%8F%E4%BA%8E%E6%88%96%E7%AD%89%E4%BA%8E90%E8%AE%B0%E5%BD%95%EF%BC%8C%E7%84%B6%E5%90%8E%E5%B0%86%E7%AC%A6%E5%90%88%E6%9D%A1%E4%BB%B6%E7%9A%84%E8%AE%B0%E5%BD%95%E9%80%81%E5%88%B0%E4%B8%8B%E4%B8%80%E9%98%B6%E6%AE%B5group管道操作符进行处理。

类似于sql中的

Select column2,count(*) from tableName where age>18 group by column2

2.4 索引

2.4.1 普通索引

索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构

1 单字段索引

db.collectionName.createIndex({field:options})

db.t_user.createIndex({age:1})

Field 是要创建索引的字段 options =1是升序创建,-1是倒序创建

2 多字段索引

db.collectionName.createIndex({"field1":1,"field2":-1})

2.4.2 高级索引

1 索引数组字段

db.collectionName.ensureIndex({"arrField":1})

arrField 是数组字段

2 索引子文档字段

db.collectionName.ensureIndex({"fieldObj.field1":1,"fieldObj.field2":1,"fieldObj.field3":1})

fieldObj是mongodb中的对象字段,field1,field2,field3是fieldObj中的子字段

ensureIndex() = createIndex()

3.0版本前都用ensureIndex(),3.0之后就用的createIndex()

如何查看我的查询字段中是包含索引的?explain()

db.collectionName.find({field:"value"}).explain()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值