skip to content

MongoDB
小试 MongoDB

常用命令

命令作用
cls清屏
show dbs查看所有数据库
show collections显示当前数据库中的所有集合

NoSQL vs SQL

MySQL 中的许多概念在 MongoDB 中具有相近的类比。本表概述了每个系统中的一些常见概念。

MySQLMongoDB
集合
文档
字段
joins嵌入文档或者链接

关系型数据库与 NoSQL 的对比

NoSQL 还是 SQL ?这一篇讲清楚

小白必须懂的 MongoDB 的十大总结

连接数据库

  • 开启 MongoDB 服务

    mongod --dbpath D:\data\db
    
  • 管理数据库

    mongo 127.0.0.1:27017
    

创建数据库

  1. 使用并创建数据库

    use user
    
  2. 在数据库 user 中的集合 member 中插入一条数据(集合需要通过向其插入数据进行创建)

    db.member.insert({ name: 'Jack' })
    
  3. 删除数据库 user 中的集合 member

    db.member.drop()
    
  4. 删除数据库user

    use user // 需要先使用数据库
    db.dropDatabase();
    

增删改查

增加数据

db.表名.insert({ name: 'Jack' })

查找数据

  1. 查找所有记录

    db.member.find()
    
  2. 查询一个字段的所有值

    db.member.distinct(name)
    
  3. 查询 age = 25 的记录

    db.member.find({ age: 25 })
    
  4. 查询 age > 20 的记录

    db.member.find({ age: { $gt: 20 } })
    
  5. 查询 age < 20 的记录

    db.member.find({ age: { $lt: 20 } })
    
  6. 查询 age >= 20 的记录

    db.member.find({ age: { $gte: 20 } })
    
  7. 查询 age >= 20 的记录

    db.member.find({ age: { $lte: 20 } })
    
  8. 查询 age >= 20 并且 age <= 25

    db.member.find({ age: { $gte: 20, $lte: 25 } })
    
  9. 查询 name 中包含 im 的记录

    db.member.find({ name: /im/ })
    
  10. 查询 name 中以 J 开头的记录

    db.member.find({ name: /^J/ })
    
  11. 查询 name 中以 m 结尾的记录

    db.member.find({ name: /m$/ })
    
  12. 查询指定列 name 数据, age > 20

    db.member.find({ age: { $gt: 20 } }, { name: 1 })
    
  13. 按照年龄排序

    db.member.find().sort({ age: 1 }) // 升序
    db.member.find().sort({ age: -1 }) // 降序
    
  14. 查询前 3 条数据

    db.member.find().limit(3)
    
  15. 查询 3 条以后的数据

    db.member.find().skip(3)
    
  16. 查询在 3-5 之间的数据

    db.member.find().limit(3).skip(2)
    
  17. or 查询(年龄为 19 或 25 的记录)

    db.member.find({
      $or: [{ age: 19 }, { age: 25 }]
    })
    
  18. and 查询(年龄大于 20 的性别为男的记录)

    db.member.find({
      $and: [{ age: { $gte: 25 } }, { sex: true }]
    })
    
  19. 查询第一条数据

    db.member.findOne()
    db.member.find().limit(1)
    
  20. 查询某个结果集的记录条数

    db.member.find({ age: { $lte: 20 } }).count()
    

修改数据

  1. 查找名字叫做 Jack 的,把年龄更改为 30 岁:

    db.member.update({ name: 'Jack' }, { $set: { age: 30 } })
    

删除数据

  1. 删除 age = 20 岁的记录

    db.member.remove({ age: 20 })
    
  2. 删除 age > 20 记录

    db.member.remove({ age: { $gt: 20 } }, { justOne: true })
    
  3. 删除 age = 20 的一条记录

    db.member.remove({ age: 20 }, { justOne: true })
    
  4. 删除集合

    db.member.drop()
    
  5. 删除数据库

    db.dropDatabase()
    

explain

获取查询时间(单位:毫秒)

db.itemlist.find({ name: 'xxx' }).explain('executionStats').executionStats.executionTimeMillis

索引

索引是对数据库表中一列或多列的值进行排序的一种结构

索引通常能够极大的提高查询的效率,如果没有索引,MongoDB 在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。

// 创建一个50000条的数据
for (let i = 0; i < 50000; i++) {
  db.itemlist.insert({
    name: 'item' + i
  })
}
  1. 创建索引

    db.member.createIndex({ name: 1 })
    
  2. 获取当前集合的索引

    db.member.getIndexes()
    
  3. 删除索引

    db.member.dropIndex({ name: 1 })
    
  4. 创建复合索引

    db.member.createIndex({ name: 1, age: -1 })
    

    该索引被创建后,基于 nameage 的查询将会用到该索引,或者是基于 name 的查询也会用到该索引,但是只是基于 age 的查询将不会用到该复合索引。因此可以说,如果想用到复合索引,必须在查询条件中包含复合索引中的前 N 个索引列。

    然而如果查询条件中的键值顺序和复合索引中的创建顺序不一致的话,MongoDB 可以智能的帮助我们调 整该顺序,以便使复合索引可以为查询所用。

    db.member.find({age: 30, name: "Jack"})

  5. 在创建索引时为其指定索引名

    db.member.createIndex({ name: 1 }, { name: 'username' })
    
  6. 创建唯一索引

    不允许具有索引值相同的行,从而禁止重复的索引或键值

    db.member.createIndex({ name: 1 }, { unique: true })
    
上一篇
二进制
下一篇
迭代法