-基本概念
数据库 (database)
集合 (conllection)
文档 (document)
- 在mongoDB中,数据库和集合都不需要手动创建,
当我们创建文档时,如果文档所在的集合或数据库不存在会手动创建数 据库和集合
-基本指令:
show dbs
show databases
-显示当前的所有数据库
use 数据库名
-进入到指定的数据库中
db
-db表示的是当前所处的数据库
show collections
-显示数据库中所有的集合
-数据库的CRUD(增删改查)的操作
- 向数据库中插入文档
**db.<collection名>.insert(doc)**
-向集合中插入一个文档
-当我们向集合中插入文档时,如果没有给文档指定_id属性,则数据库会自动为文档添加_id。
该属性用来作为文档的唯一标识
-_id我们可以自己指定,如果我们指定了数据库就不会在添加了,如果自己指定_id也必须确保它的唯一性。
**db.<collection名>.insertOne()**
-插入一个文档对象
**db.<collection名>.insertMany()**
-插入多个文档对象
-例子:向test数据库中的,stus集合中插入一个新的学生对象
{name:“张三”,age:18,gender:“男”}
db.stus.insert({name:“张三”,age:18,gender:“男”});一个
db.stus.insert([{name:“张三”,age:18,gender:“男”},{},{}]);多个
- 查询
**db.<collection名>.find()**
-查询当前集合中的所有的文档
-find()用来查询集合中所有符合条件的文档
-find()可以接收一个对象作为条件参数
{ } 表示查询集合中所有的文档
{属性:值 } 查询属性 是 指定值的文档
-find()返回的是一个数组
find()[索引下标]
**db.<collection名>.findOne()**
-用来查询集合中符合条件的第一个文档
-findOne()返回的是一个文档对象
**db.<collection名>.find({})**
-用来查询集合中所有的文档
**db.<collection名>.find({}).count()**
-查询所有结果的数量
在查询的时候,可以第二个参数的位置来设置查询结果的 投影
例如:
db.collection.find({},{name:1,_id:0,sal:1})
1显示 0不显示
- 修改
**db.<collection名>.update(查询条件,新对象)**
-update() 默认情况下会替换所有的东西 ps:太狠了
-如果需要修改指定的属性,而不是替换所有的。需要用“ 修改操作符 ”来完成
**$set** 可以用来修改文档中的指定属性
**$unset** 可以用来删除文档中的指定属性
- 例如:
db.collection.update(
{ "_id":ObjectId("xxxx") },
{ $set:{
name:"ss",
age:21,
.....
}
}
)
db.collection.update(
{ "_id":ObjectId("xxxx") },
{ $unset:{
name:"ss",
age:21,
.....
(ps:name 后面的有没有无所谓 unset是删除name这个属性,有没有值都可以)
}
}
)
**-uodate()默认只会修改一个**
**db.<collection名>.updateMany()**
- 同时修改多个符合条件的文档
**db.<collection名>.updateOne()**
- 修改一个符合条件的文档
- 删除
**db.<collection名>.remove()**
- 删除符合条件的所有文档(默认条件下会删除多个)
如果remove()第二个参数传递一个true,则只会删除一个
如果只传递一个空对象作为参数,则会删除集合中所有文档
**db.<collection名>.deleteOne()**
**db.<collection名>.deleteMany()**
-remove() 可以根据条件来删除文档,传递的方式和find()一样
**db.<collection名>.drop()**
删除集合
**db.dropDatabase()**
删除数据库
- 例子
skip()用于跳过指定数量的数据
-db.collection.find().skip(10).limit(10);
从11开始显示到20条数据
- 文档之间的关系
一对一
-在MongoDB中,可以通过内嵌文档的形式来体现一对一的关系
一对多/多对一
-也可以通过内嵌文档映射一对多的关系
多对多
- 排序
sort()可以用来指定文档的排序规则,sort()需要传递一个对象来指定排序规则 1表示升序 -1表示 降序
limit skip sort 可以 以任意的顺序进行调用
-MongoDB 索引
索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。
这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。
MongoDB使用 createIndex() 方法来创建索引。
注意在 3.0.0 版本前创建索引方法为 db.collection.ensureIndex(),之后的版本使用了 db.collection.createIndex() 方法,ensureIndex() 还能用,但只是 createIndex() 的别名。
语法:
db.collection.createIndex(keys, options)
语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。
实例:
db.col.createIndex({“title”:1})
createIndex() 方法中你也可以设置使用多个字段创建索引(关系型数据库中称作复合索引)。
db.col.createIndex({“title”:1,“description”:-1})
1、查看集合索引
db.col.getIndexes()
2、查看集合索引大小
db.col.totalIndexSize()
3、删除集合所有索引
db.col.dropIndexes()
4、删除集合指定索引
db.col.dropIndex(“索引名称”)
-前端连接 MongoDB
1、下载安装Mongoose
npm i mongoose - - save
2、在项目中引入mongoose
var mongoose = require("mongoose");
3、连接MongoDB数据库
mongoose.connect(‘mongodb://数据库的ip地址:端口号/数据库名’,{useMongoClient : true})
- 如果端口号是默认号(27017)则可以省略不写
4、断开数据库连接(一般不调用)
mongoose.disconnect()
- 监听MongoDB数据库的连接状态:
- 在Mongoose对象中,有一个属性叫做connection,该对象表示的就是数据库连接用过监听该对象的状态,可以监听数据库的连接与断开。
数据库连接成功的事件:
mongoose.connection.once("open",function(){})
数据库断开的事件:
mongoose.connection.once("close",function(){})
// 引入
var mongoose = require("mongoose");
// 连接数据库
mongoose.connect("mongodb://127.0.0.1/mongoose_test");