基础部分
数据库就是对数据库进行持久化的,防止电脑重启导致信息或者数据的丢失,因为程序是跑在内存里的
非关系数据库(NoSQL)反对SQL,因为有许多程序员不喜欢SQL的这种标准化,因为标准化在一定程度上限制了创新性。
mongoDB是非关系型数据库中的文档型数据库,为了快速的开发互联网应用。mongoDB中存储的是二进制的JSON,我们可以简单认为是JSON;
数据库中放集合,集合中放文档,我们是对文档进行crud,集合和数据库都不需要手动创建
| 指令 | 解释 |
|---|---|
| uer <数据库名> | 使用某个数据库 |
| db | 表示当前所处的数据库 |
| show dbs | 显示所有的数据库 |
| show collections | 显示数据库中的所有集合 |
| db.<集合名>.insert({JSON}) | 向集合中插入JSON文档 |
| db.<集合名>.find({属性名:"值",属性名:"值"}) | 查询这个集合中的文档,传的这几个属性是AND的关系,返回的文档是同时符合这些属性的文档 |
| db.<集合名>.findOne({属性名:"值",属性名:"值"}) | 返回查到的第一条符合条件的文档,其余的和find()相同 |
| db.<集合名>.find().count() | 查看返回的文档的总数 |
| db.<集合名>.update({age:"19"},{name:"liuliu",age:"18",school:"tjut"}) | 第一个参数是条件,第二个参数是替换为什么(不推荐使用) |
| db.<集合名>.update({age:"19"},{$set:{age:"18"}}) | 针对某一个属性去修改(推荐使用) |
| db.<集合名>.remove({}) | 删除文档 |
| db.<集合名>.drop() | 删除集合 |
| db.student.find({}).sort({age:1}) | 将查询结果按照age进行排序,1表示升序,-1是降序 |
ps:
1.<>中的内容代表这是一个名称
2.update在默认情况下之后修改查找到符合条件的第一个,设置multi为true就可以修改多个,updateMany()会修改查到的所有符合条件的文档。
3.我们在实际的开发的时候其实是很少用到删除数据库文档操作的,一般的做法是设置一个字段,用来表示这个这个文档是不是被删除,例如用flag=1,来表示这个数据是被删除的,用flag=0来表示这个数据没有被删除的。然后再查询的时候结合flag的值来查询。
4.内嵌查询必须加引号 eg :db.user.find({"hobby.cities":"beijing"})。
5.我们不会执行不带条件的查询。因为这样的数据会很过,一般要用.limit(n)来限制最多显示n条数据。.skip(n)用于跳过指定数量的数据。
文档之间的关系
一对一,一对多,多对多
投影
db.student.find({},{name:1}) 拿到想显示的字段,而不是拿到所有的字段。比如这个查询语句find的第二个参数传了一个name,就表示拿到所有符合条件的文档的name。
mongoose(对象文档模型库)
mongoose是node中的一个模块,用这个模块可以操作mongoDB数据库。把数据库中的文档,映射成nodejs中的对象。mongoose中的Schema(模式结构),就是一个约束,比如值的类型,一条文档有多少键值对。Model:一个Model对应数据库中的集合,Document对应的数据库中的文档。
连接数据库的代码:
const mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/student",{useNewUrlParser:true,useUnifiedTopology: true});
mongoose.connection.once("open",function(){
console.log("数据库连接建立");
});
mongoose.connection.once("close",function(){
console.log("数据库连接断开");
});
let Schema = mongoose.Schema;
let stuSchema = new Schema({
name:String,
age:Number,
address:{
type:String,
default:"天津理工大学"
}
})
//一个Model相当于数据库中的一个集合
let stuModel = mongoose.model("tjutStudents",stuSchema);
// stuModel.create({
// name:"zh",
// age:18,
// address:"南开大学"
// })
stuModel.find({name:"zh"},function(err,docs){
// docs是查询到的符合条件的结果,是数组的形式返回
let j = JSON.stringify(docs)
console.log(typeof docs);
console.log(typeof j);
});
// stuModel.updateMany({name:"zh"},{$set:{address:"北京邮电大学"}},function(){
// console.log("数据修改成功");
// })
// stuModel.countDocuments({},function(err,count){
// console.log(count);
// })
//一般情况下mongoDB数据库只需要连接一次,而且不会轻易断开
// mongoose.disconnect();