028-86261949

当前位置:首页 > 技术交流 > Mongodb进阶之Mongodb的使用

Mongodb进阶之Mongodb的使用

2020/11/10 15:40 分类: 技术交流 浏览:0

1. MongoDB数据的使用

2.1 mongodb中的概念

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

 

 

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})

  1. 显示集合列表   show collections
  2. 创建表   db.createCollection(name, options)

Name :集合名称

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

  1. 查询集合   db.collectionName.find()
  2. 条件查询  db.tablename.find({“age”:18})
  3. 排序   db.COLLECTION_NAME.find().sort({KEY:1})

   注意:使用 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

  1. 模糊查询

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/})

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

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

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

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

注意:

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

②update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的

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

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

12、删除文档 db.collection.remove(<query>,{justOne: <boolean>,writeConcern: <document>})

注意:

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

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

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

2.3 mongodb高级查询

2.3.1 条件查询

1  >($gt) <($lt) >=($gte) <=($lte) 操作符

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

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

等价于sql的

Select * from tablename where columnname > 100

2  使用 (<) 和 (>) 查询 - $lt 和 $gt

db.collectionName.find({field : {$lt :200, $gt : 100}})

db.t_user.find({“age”: {$lt : 18,$gt: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([{$group:{_id:"$field",”别名”:{$sum:1}}}])

Db.t_user.aggregate([{$group:{“sex”:"$field",num_tutorial:{$sum:1}}}])

等价于sql的

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

 

3 聚合中常用的几个操作

 

4 管道

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

db.collectionName.aggregate( [

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

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

                       ] );

$match用于获取字段中大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。

类似于sql中的

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

更多的语法可以参考:  https://www.runoob.com/mongodb/mongodb-tutorial.html

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()

#标签:java,编程,代码,程序员