浏览数据库

在shell中使用use函数,在命令后加上希望使用的数据库名称即可浏览数据库。 use 数据库名吗,进入到指定的数据库中。例如 use library

该命令是如果存在该数据库,将焦点切换到该数据库,如果该数据库不存在,则会隐式的创建该数据库,并且将焦点切换到该数据库,然后我们可以操作该数据库中集合与数据等。焦点数据库中我们就可以使用db关键字代表当前数据库,该方法只能在MongoDB shell中使用。

查看可用的数据库和集合。

MongoDB将保存数据的时候自动创建数据库,并且还区分大小写。在切换到某个数据库之前,最好先查看MongoDB中目前所有可用的数据库,避免出现忘记数据库名称或者拼写不正确的情况。可通过show dbs 或者 show databases函数实现。要查看当前数据库中的所有集合,可使用show collections函数。

数据插入

在集合中插入数据:

1.插入文档:
db.[documentName].insert({})

有几种方式可用完成数据的插入:

1)先定义数据,然后使用insert()或者insertOne()插入数据到集合中

var document=(
{Type:"book",
Title:"Definitive Guide to MongoDB 3rd ed.,The",
ISBN:"978-1-4842-1183-0",
Publisher:"Apress",
Author:["Hows, David","Plugger,Eelco","Membrey,Peter","Hawkins,Tim"]})
db.media.insert(document)

2)在使用insert()或者insertOne()时,在参数中输入文档的内容。

db.media.insert({Type:"CD",Artist:"Nirvana",Title:"Nevemind`",
Tracklist:[{Track:"1",Title:"Smells like Teen Spirit", Length:"5:02"},
{Track:"2", Title:"In Bloom",Length:"4:15"}]})

插入文档时,键的名字必须遵守如下规则:

(1)键不能含有”\0”(空字符)。因为这个字符在文档中表示键的结尾
(2)”.”和”$”是保留字段,非常不建议使用,只有在特定的情况下才会使用,比如”.”字符,该字符在mongoDB中表示取其子字段,所以如果你在键中使用了该字段,取的就不是该字段了。比如{”data.page”:1},这时候我们如果取”data.page”的值,就不是”data.page”这个键了,而是”page”字段的值了。
(3)_开头的键也是保留的,不建议使用。
(4) 键区分大小写,”Foo”和”foo”是两个不同的键。
(5)一个文档中键不能重复。
(6)集合的名称(包括数据库名和.)不能超过128个字符。
(7)集合名必须以字母或者下划线开头,system是保留键,不能使用。
(8)空字符串不能用作集合名称。

查询数据

函数find()提供了从同一集合的多个文档中获取数据的最简单方式。在查询数据时,有大量可用的选项、操作符、表达式、过滤器等。

  1. 查询出所有library数据库中的media集合的数据
 db.media.find()

如果希望查询结果格式规范点,可用使用pretty()函数。
指定返回的键

db.[documentName].find ({条件},{键指定})

数据准备persons.json

  1. 查询出所有数据的指定键(name ,age ,country)
db.persons.find({},{name:1,age:1,country:1,_id:0})

使用点号

在使用复杂文档结构(包含数组或内嵌对象的文档)时,也可以使用其他方法查询这些对象中的信息。

在键名之后使用点【.】,将告诉find函数查询文档中内嵌的信息,处理数组时代码会更简单些。

  1. 查询出所有library数据库中的media集合的包含特定歌曲"In Bloom"的CD数据
db.media.find({“Tracklist.Title”: "In Bloom"}

使用函数sort、limit和skip

  1. 通过sort函数可以对查询返回的结果进行排序。
    该函数与SQL 中的ORDER BY 语句类似,它将使用键的名称和排序方法作为条件。其中1代表升序,-1代表降序。
    如果使用一个不存在的键用于排序,结果的顺序就是未定义的。
  2. 使用limit函数可用限制返回结果的最大数目。该函数只需要一个参数:希望返回的结果数目。如果使用的参数为0,将返回所有的结果。
  3. 使用skip()函数忽略掉集合中的前N个文档。
    Skip函数和limit函数结合使用,实现分页查询功能。

1).Limit返回指定的数据条数
1.1查询出persons文档中前5条数据

db.persons.find({},{_id:0,name:1}).limit(5)

2).Skip返回指定数据的跨度
2.1查询出persons文档中5~10条的数据

db.persons.find({},{_id:0,name:1}).limit(5).skip(5)

3).Sort返回按照年龄排序的数据[1,-1]

db.persons.find({},{_id:0,name:1,age:1}).sort({age:1})

注意:mongodb的key可以存不同类型的数据排序就也有优先级
最小值
null
数字
字符串
对象/文档
数组
二进制
对象ID
布尔
日期
时间戳 ->正则 ->最大值

4).Limit和Skip完成分页

4.1三条数据位一页进行分页
第一页:db.persons.find({},{_id:0,name:1}).limit(3).skip(0)
第二页:db.persons.find({},{_id:0,name:1}).limit(3).skip(3)

4.2skip有性能问题,没有特殊情况下我们也可以换个思路

对文档进行重新解构设计

每次查询操作的时候前后台传值全要把上次的最后一个文档的日期保存下来

db.persons.find({date:{$gt:日期数值}}).limit(3)

个人建议:应该把软件的中点放到便捷和精确查询上而不是分页的性能上,因为用户最多不会翻查过2页的。

使用固定集合、自然顺序和$natural
1.自然顺序

自然顺序是数据库中集合的原生排序方法。在查询集合的文档时,没有显式指定排序顺序,结果将默认按照前向自然顺序返回,一般与文档的插入顺序一致。
自然集合的自然顺序没有定义,可能取决于文档增长模式,用于查询的索引和所使用的存储引擎。
固定集合的自然顺序保证与文档插入的顺序一致。
与标准的结合不同,固定集合必须使用createCollection函数来显式创建。必须使用参数指定集合的大小(单位为字节)。

2.固定集合(capped collection)是数据库中的一种集合,它的自然顺序保证与文档插入的顺序一致,另一个优点是大小固定,实现数据替换。
与标准的集合不同,固定集合必须使用createCollection函数来显式创建。必须使用参数指定集合的大小(单位为字节)。

3.创建集合
db.createCollection(name, options)
参数说明:
name: 要创建的集合名称
options: 可选参数, 指定有关内存大小及索引的选项
options 可以是如下参数:

db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )


4 '美元符号’natural

用于逆转默认结果的顺序(即插入文档顺序)
例如:查询用于保存登录失败记录的固定集合audit中最近的10条记录
db.audit.find().sort({$natural: -1}).limit(10)
固定集合中的文档可以更新,但是文档大小不能改变,文档也不是删除,前者出现将提示更新失败,后者要实现必须删除整个集合并重建。
使用validate()检查现有集合已经使用的空间和stats()检查集合大小

获取单个文档
可以用findOne()函数来获取集合中的单个文档。与limit(1)函数得到的结果是一致,表示获取集合中的第一个文档。
findOne()函数与find()函数的语法结构一致。

使用聚集命令
使用聚集命令中的3个函数:count,distinct,group,还包括聚集框架.

  1. 使用count()函数返回文档的数目
    使用count()函数将返回指定集合中文档的数目
 db.media.count()

还可以结合条件操作符使用count(),执行额外的过滤

 db.persons.find({country:”China”}),count()
  1. 使用distinct()函数获取唯一值 —相当于SQL中的distinct
    查询persons集合中国家的信息
 db.persons.distinct(“country”)

还可以接受嵌套键作为distinct()的参数
查询CD标题的唯一值

db.media.distinct(“Tracklist.Title”)
  1. 使用group函数将结果分组----相当于SQL中的group by 字句
    使用group()函数将返回一个已分组元素的数组。函数group()接受3个参数: key、initial和reduce
    Key :分组键对象,指定希望使用哪个键对结果进行分组
    Initial:初始化累加器,指定为每个分组结果提供的元素统计的起始基数。如果希望返回指定的数字,整个参数就默认为0.
    Reduce:组分解器。把所有类似的条目分组在一起。接受两个参数items和prev,表示正在遍历的当前文档和聚集计数对象。

find查找详解

  1. MongoDB 支持大量的条件操作符用于更好地过滤结果。常用的条件操作符查询条件如下:

  2. 查询条件
    2.1查询出年龄在25到27岁之间的学生
    db.persons.find({age: {$gte:25,$lte:27},{_id:0,age:1})
    2.2查询出所有不是韩国籍的学生的数学成绩
    db.persons.find({country:{$ne:” Korea”}},{_id:0,m:1})

  3. 包含或不包含
    in或in或in或nin
    2.3查询国籍是中国或美国的学生信息
    db.persons.find({country:{$in:[“USA”,“China”]}})
    2.4查询国籍不是中国或美国的学生信息
    db.persons.find({country:{$nin:[“USA”,“China”]}})

  4. OR查询

$or
   2.4查询语文成绩大于85或者英语大于90的学生信息`db.persons.find({$or:[{c:{$gte:85}},{e:{$gte:90}}]},{_id:0,c:1,e:1})`
  1. Null
    把中国国籍的学生上增加新的键sex
    db.person.update({country:”China”},{$set:{sex:”m”}})
    2.5查询出sex 等于 null的学生
    db.persons.find({sex:{$in:[null]}},{country:1})

  2. 正则查询
    2.6查询出名字中存在”li”的学生的信息
    db.persons.find({name:/li/i},{_id:0,name:1})

  3. not的使用‘not的使用 `not的使用‘not可以用到任何地方进行取反操作 2.7查询出名字中不存在”li”的学生的信息db.persons.find({name:{$not:/li/i}},{_id:0,name:1})`
    not和not和not和nin的区别是not可以用在任何地方儿not可以用在任何地方儿not可以用在任何地方儿nin是用到集合上的

  4. 数组查询$all和index应用
    2.8查询喜欢看MONGOD和JS的学生
    db.persons.find({books:{$all:[“MONGOBD”,”JS”]}},{books:1,_id:0})
    2.9查询第二本书是JAVA的学习信息
    db.persons.find({“books.1”:”JAVA”})

  5. 查询指定长度数组$size它不能与比较查询符一起使用(这是弊端)
    2.8查询出喜欢的书籍数量是4本的学生
    db.persons.find({books:{$size:4}},{_id:0,books:1})
    2.9查询出喜欢的书籍数量大于3本的学生
    1.增加字段size

     `db.persons.update({},{$set:{size:4}},false, true)`2.改变书籍的更新方式,每次增加书籍的时候size增加1`db.persons.update({查询器},{$push:{books:”ORACLE”},$inc:{size:1}})`
    3.利用`$gt`查询`db.persons.find({size:{$gt:3}})`1
    2.10利用shell查询出Jim喜欢看的书的数量
    
var persons = db.persons.find({name:"jim"})
while(persons.hasNext()){obj = persons.next();print(obj.books.length)
}
  1. KaTeX parse error: Expected '}', got 'EOF' at end of input: …jim"},{books:{"slice":[1,3]}})2.12查询出最后一本书db.persons.find({name:“jim”},{books:{"$slice":-1},_id:0,name:1})`

  2. 文档查询
    为jim添加学习简历文档 jim.json
    2.13查询出在K上过学的学生

    1. 这个我们用绝对匹配可以完成,但是有些问题(找找问题?顺序?总要带着score?)
      db.persons.find({school:{school:"K",score:"A"}},{_id:0,school:1})
      2.为了解决顺序的问题我可以用对象”.”的方式定位
      db.persons.find({"school.score":"A","school.school":"K"},{_id:0,school:1})
      3.这样也问题看例子:
      db.persons.find({"school.score":"A","school.school":”J”},{_id:0,school:1})
      同样能查出刚才那条数据,原因是score和school会去其他对象对比
      4.正确做法单条条件组查询$elemMatch

db.persons.find({school:{$elemMatch:{school:"K",score:"A"}}})1

mongoDB使用数据(数据的插入,查询等介绍)相关推荐

  1. mysql 控制台环境下查询中文数据乱码,插入、更新中文数据不成功

    mysql 控制台环境下查询中文数据乱码,插入.更新中文数据不成功 登录mysql密码是加入编码参数--default-character-set,中文用gbk mysql -uroot -pabct ...

  2. MySQL 8——学习笔记03(插入、更新、删除 数据 [DML语句]、查询数据 [DQL语句])

    MySQL 8--学习笔记03(插入.更新.删除 数据 [DML语句]) 一.插入数据 1.1 插入所有字段.插入部分字段 1.2 同时插入多条记录(批量插入) 1.3 将查询结果插入到表中 二.更新 ...

  3. Python全栈 MongoDB 数据库(数据的修改)

    修改操作符的使用 $set 修改一个域的值,增加一个域 阿哲年龄修改为33 db.class1.update({name:'阿哲'},{$set:{age:33}}) 如果sex域不存在则会添加这个域 ...

  4. mongodb mysql json数据_使用MongoDB与MySQL有很多JSON字段?

    所以,直接回答问题- Shall we chose mongodb if half of data is schemaless, and is being stored as JSON if usin ...

  5. MongoDB 教程六: MongoDB管理:数据导入导出,数据备份恢复及用户安全与认证

    视频地址:MongoDB 教程六: MongoDB管理:数据导入导出,数据备份恢复及用户安全与认证 MongoDB数据库备份与恢复 一.备份 先介绍下命令语法: mongodump -h dbhost ...

  6. 大数据的分布式SQL查询引擎 -- Presto的详细使用

    Presto – Distributed SQL Query Engine for Big Data 官网 项目源码 官方文档 目录 1 Presto 概述 2 概念 2.1 服务进程 2.2 数据源 ...

  7. MongoDB Data Models 数据结构设计

    1 数据建模介绍 MongoDB的数据结构很灵活,不强制要求数据结构.但是通常一个集合内部使用相同的结构. 数据建模的关键是平衡应用的需求和数据库执行和数据检索模型的性能.设计数据模型时,要考虑数据的 ...

  8. 查询性能优化(使用 Explain 进行分析、优化数据访问、重构查询方式)、存储引擎(InnoDB/MyISAM)

    1.查询性能优化 1.1 使用 Explain 进行分析 Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explain 结果来优化查询语句. 比较重要的字段有: select ...

  9. linux中mongo的导出数据,Linux下mongodb安装及数据导入导出教程(示例代码)

    Linux下mongodb安装及数据导入导出教程 #查看linux发行版本 cat /etc/issue #查看linux内核版本号 uname -r 一.Linux下mongodb安装的一般步骤 1 ...

最新文章

  1. deeplearning搜索空间
  2. Visual Studio编译选项简介
  3. javascript 作用_JavaScript承诺如何从内到外真正发挥作用
  4. 计算机教室卡通画,电脑绘画对彩色童年的应用
  5. Java selenium和python_c#和Java和python设置selenium超时时间
  6. 【java】io流之字符输出流:java.io.Writer类及子类的子类java.io.FileWriter
  7. Sql Server 的增删改查
  8. Python实现简易搜索引擎
  9. 企业服务器搭建与维护论文,《企业服务器搭建的研究论文》-毕业论文设计(可用).doc...
  10. 【信号与系统】指数信号与正弦信号
  11. 计算机辅助教学应用于哪些方面,计算机辅助教学在英语教学中的运用
  12. Python学习之字典练习(重复数字统计)
  13. 全民Python时代已经到来
  14. elasticsearch教你使用搜索引擎
  15. 企业管理 - 现代管理學之父
  16. Android中PIN和PUK码解锁研究
  17. 最专业的职业生涯规划测试集合(推荐)
  18. 【简单算法】47.帕斯卡三角形
  19. matlab导出畸变系数,鱼眼镜头参数表,如何拟合并求出系数
  20. 好用的实时渲染器不止lumion,上呆猫云工作站,跨过显卡门槛get更多制作搭配……

热门文章

  1. datetime日期、时间的计算
  2. 数论学习书籍及信奥中的数学之数论相关资料
  3. 推荐几个优质的公众号
  4. 做什么小生意能月入一万?卖什么月薪过万?
  5. Git HEAD及detached head
  6. 北斗导航 | GBAS:双星座/双频点 CAT II/III 完好性(DC/DF GBAS Integrity)
  7. LE Audio规范概述
  8. react-native环境配置
  9. 基金认购与申购的区别是什么
  10. Chrome浏览器存储书签文件的位置