本文简单介绍了 mongodb 数据库的基本概念以及基础用法
MongoDB
是为快速开发互联网 Web
应用而设计的数据库系统MongoDB
的设计目标是极简、灵活、作为 Web
应用栈的一部分MongoDB
的数据模型是面向文档的,所谓文档,是一种类似于 JSON
的结构,简单理解 MongoDB
这个数据库中存的是各种各样的 JSON(BJSON)
数据库:是一个仓库,在仓库中可以存放集合
集合
文档
JS
中的对象,在 MongoDB
中每一条数据就是一个文档多个文档组成集合,多个集合组成数据库
show dbs/ databases
: 显示当前的所有数据库use
数据库名:进入到指定的数据库中 eg: use my_test
db
:表示的是当前所处的数据库show collections
:显示数据库中所有的集合db..insert(doc)
id
属性,则数据库会自动为文档添加 _id
,该属性用来作为文档的唯一标识_id
我们可以自己指定,如果我们指定了,则数据库就不会再自动生成了。如果自己指定 _id
,也必须确保它的唯一性test
数据库中的 students
集合中插入一个新的学生对象:{name: "小明", age: 18, addr: "male"}
use test;
db.students.insert({name: "小明", age: 18, addr: "三味书屋"});
db..insertOne(doc)
:向数据库中插入一条数据db..insertMany(doc)
:向数据库中插入多条数据示例:
use test;
// 插入一条
db.students.insert({name: "小明", age: 18, addr: "三味书屋", salary: 3000});
// 插入多条
db.students.insert([{name: "小红", age: 16, addr: "东方明珠", salary: 5000}, {name: "小白", age: 19, addr: "王府井", salary: 6000}]);
// 等同于下面的方式
// 插入一条
db.students.insertOne({name: "小明", age: 18, addr: "三味书屋", salary: 3000});
// 插入多条
db.students.insertMany([{name: "小红", age: 16, addr: "东方明珠", salary: 5000}, {name: "小白", age: 19, addr: "王府井", salary: 6000}]);
db..find()
find({})
:也是查询当前集合中所有的文档.count()
: 查询出所有结果的数量.length()
: 查询出所有结果的数量db..findOne()
:查询集合中符合条件的第一个文档
use test
// 查询集合中所有的文档(实际项目中不会这么操作)
db.students.find();
// 查询集合中符合条件的所有文档
db.students.find({ age: 19 });
// 查询符合条件的第一个文档
db.students.findOne({ age: 19 });
// 查询符合条件的文档数目
db.students.find({ age: 19 }).count();
// 或
db.students.find({ age: 19 }).length();
db..find(filter, options)
filter
:查询条件对象options
: 投影条件对象,需要展示的属性设置为 1,不需要展示的属性设置为 0.limit(num)
:显示多少个文档.skip(num)
:跳过多少个文档.sort({ key1: 1, key2: -1 })
:按照 key1
正序排列,排完之后再按照 key2
倒序排列示例
use test;
// 查询 students 集合中所有对象,只展示 age 字段
db.students.find({}, { age: 1 });
// 查询 students 集合中所有对象,不展示 age 字段
db.students.find({}, { age: 0 });
// 查询 students 集合,只展示符合条件的前 2 条数据
db.students.find({}).limit(2);
// 查询 students 集合中所有对象,跳过前 2 条数据
db.students.find({}).skip(2);
// 查询 students 集合中所有对象,按 age 正序排列
db.students.find({}).sort({ age: 1 });
// 查询 students 集合中所有对象,按 age 倒序排列
db.students.find({}).sort({ age: -1 });
$gt
:大于$gte
:大于等于$eq
:等于$lt
:小于$lte
:小于等于$or
:或者之前查询不使用任何查询器时,条件的判断是包含,不是相等
示例:
// 工资大于 3000
db.students.find({salary: { $gt: 3000 }});
// 工资大于等于 3000
db.students.find({salary: { $gte: 3000 }});
// 工资等于 3000
db.students.find({salary: { $eq: 3000 }});
// 工资小于 6000
db.students.find({salary: { $lt: 6000 }});
// 工资小于等于 6000
db.students.find({salary: { $lte: 6000 }});
// 工资大于 3000 且小于 6000
db.students.find({salary: { $gt: 3000, $lt: 6000 }});
// 工资是 3000 或者 名字是 小白
db.students.find({$or: [ {salary: 3000}, {name: "小白"} ]});
db..update(查询条件, 新对象, [options])
options
: 配置对象
upsert:
multi:
是否跟新多条,默认是 falsewriteConcern:
collation:
update()
默认情况下会使用新对象来替换旧的对象$set
: 修改操作符,修改属性值。$unset
: 修改操作符,删除属性值。
示例
use test
// 修改一条数据
db.students.update({name: '小明'}, {$set: { age: 19 }});
// 等同于 updateOne
db.students.updateOne({name: '小明'}, {$set: { age: 19 }});
// 修改多条数据
db.students.update({age: 19}, {$set: { addr: '水月洞天' }}, { multi: true });
// 等同于 updateMany
db.students.updateMany({age: 19}, {$set: { addr: '水月洞天' }});
// 数据替换
db.students.update({age: 16}, { name: '小花', age: 14, addr: '迪士尼乐园' });
// 等同于 replaceOne
db.students.replaceOne({age: 16}, { name: '小花', age: 14, addr: '迪士尼乐园' });
常用修改器:
$set
: 设置属性$unset
:删除属性$push
:向数组中添加一条数据$addToSet
:向数组中添加一条数据,与 $push
的区别:若数据已存在,则不再添加$inc
(只能用于 Number 类型的值):用来增加已有属性的值,若属性不存在,则创建该属性// 修改 addr 属性
db.students.updateMany({age: 19}, { $set: { addr: '花果山' } });
// 为小花删除 age 属性
db.students.updateOne({name: '小花' }, { $unset: { age: '' } });
// 先为小明添加一个 hobby 属性,其中有一个 cities 属性是一个数组
db.students.updateOne({name: '小明' }, { $set: { hobby: { cities: '北京', '上海' } } });
// 为小明的 cities 属性 添加一个 '杭州',可以通过 . 操作符为下级属性赋值,但是必须用 "" 引号包裹起来
db.students.updateOne({name: '小明' }, { $push: { "hobby.cities": '杭州' } });
// 将 addr 为 '花果山' 的文档,年龄都加 2 岁
db.students.updateMany({addr: '花果山'}, { $inc: { age: 2 } });
db..remove(查询条件, [justone]])
{}
作为参数,则会删除集合中的所有数据。使用这种方式清空集合性能较差justone
:
默认是 false
,设置为 true
,则只会删除匹配到的第一个文档db..deleteOne(查询条件)
:删除匹配到的第一个文档db..deleteMany(查询条件)
:删除匹配到的所有文档示例
// 删除一条
db.students.remove({ name: '小花' }, true);
// 等同于 deleteOne
db.students.deleteOne({ name: '小花' });
// 删除多条
db.students.remove({ age: '19' });
// 等同于
db.students.deleteMany({ age: '19' });
// 删除所有数据(不建议使用这种方式清空数据,速度较慢)
db.students.deleteMany({});
db..drop()
: 删除集合db.dropDatabase()
:删除数据库示例
// 删除 students 集合(建议使用这种方式清空数据,速度较快)
db.students.drop();
// 删除当前数据库
db.dropDatabase();