常用命令
命令 | 作用 |
---|---|
cls | 清屏 |
show dbs | 查看所有数据库 |
show collections | 显示当前数据库中的所有集合 |
NoSQL vs SQL
MySQL
中的许多概念在 MongoDB
中具有相近的类比。本表概述了每个系统中的一些常见概念。
MySQL | MongoDB |
---|---|
表 | 集合 |
行 | 文档 |
列 | 字段 |
joins | 嵌入文档或者链接 |
连接数据库
-
开启
MongoDB
服务mongod --dbpath D:\data\db
-
管理数据库
mongo 127.0.0.1:27017
创建数据库
-
使用并创建数据库
use user
-
在数据库
user
中的集合member
中插入一条数据(集合需要通过向其插入数据进行创建)db.member.insert({ name: 'Jack' })
-
删除数据库
user
中的集合member
db.member.drop()
-
删除数据库
user
use user // 需要先使用数据库 db.dropDatabase();
增删改查
增加数据
db.表名.insert({ name: 'Jack' })
查找数据
-
查找所有记录
db.member.find()
-
查询一个字段的所有值
db.member.distinct(name)
-
查询
age = 25
的记录db.member.find({ age: 25 })
-
查询
age > 20
的记录db.member.find({ age: { $gt: 20 } })
-
查询
age < 20
的记录db.member.find({ age: { $lt: 20 } })
-
查询
age >= 20
的记录db.member.find({ age: { $gte: 20 } })
-
查询
age >= 20
的记录db.member.find({ age: { $lte: 20 } })
-
查询
age >= 20
并且age <= 25
db.member.find({ age: { $gte: 20, $lte: 25 } })
-
查询
name
中包含im
的记录db.member.find({ name: /im/ })
-
查询
name
中以J
开头的记录db.member.find({ name: /^J/ })
-
查询
name
中以m
结尾的记录db.member.find({ name: /m$/ })
-
查询指定列
name
数据,age > 20
db.member.find({ age: { $gt: 20 } }, { name: 1 })
-
按照年龄排序
db.member.find().sort({ age: 1 }) // 升序 db.member.find().sort({ age: -1 }) // 降序
-
查询前 3 条数据
db.member.find().limit(3)
-
查询 3 条以后的数据
db.member.find().skip(3)
-
查询在 3-5 之间的数据
db.member.find().limit(3).skip(2)
-
or
查询(年龄为 19 或 25 的记录)db.member.find({ $or: [{ age: 19 }, { age: 25 }] })
-
and
查询(年龄大于 20 的性别为男的记录)db.member.find({ $and: [{ age: { $gte: 25 } }, { sex: true }] })
-
查询第一条数据
db.member.findOne() db.member.find().limit(1)
-
查询某个结果集的记录条数
db.member.find({ age: { $lte: 20 } }).count()
修改数据
-
查找名字叫做 Jack 的,把年龄更改为 30 岁:
db.member.update({ name: 'Jack' }, { $set: { age: 30 } })
删除数据
-
删除
age = 20
岁的记录db.member.remove({ age: 20 })
-
删除
age > 20
记录db.member.remove({ age: { $gt: 20 } }, { justOne: true })
-
删除
age = 20
的一条记录db.member.remove({ age: 20 }, { justOne: true })
-
删除集合
db.member.drop()
-
删除数据库
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 }) }
-
创建索引
db.member.createIndex({ name: 1 })
-
获取当前集合的索引
db.member.getIndexes()
-
删除索引
db.member.dropIndex({ name: 1 })
-
创建复合索引
db.member.createIndex({ name: 1, age: -1 })
该索引被创建后,基于
name
和age
的查询将会用到该索引,或者是基于name
的查询也会用到该索引,但是只是基于age
的查询将不会用到该复合索引。因此可以说,如果想用到复合索引,必须在查询条件中包含复合索引中的前 N 个索引列。然而如果查询条件中的键值顺序和复合索引中的创建顺序不一致的话,MongoDB 可以智能的帮助我们调 整该顺序,以便使复合索引可以为查询所用。
db.member.find({age: 30, name: "Jack"})
-
在创建索引时为其指定索引名
db.member.createIndex({ name: 1 }, { name: 'username' })
-
创建唯一索引
不允许具有索引值相同的行,从而禁止重复的索引或键值
db.member.createIndex({ name: 1 }, { unique: true })