第一天
笔记
node
- 包(package)
- 将多个模块组合为一个完整的功能,就是一个包
- 包结构
bin
- 二进制的可执行文件,一般都是一些工具包中才有
lib
- js文件
doc
- 文档
test
- 测试代码
package.json
- 包的描述文件
- package.json
- 它是一个json格式的文件,在它里面保存了包各种相关的信息
name 包名
version 版本
dependencies 依赖
main 包的主要的文件
bin 运行的代码
- npm(Node Package Manager node的包管理器)
- 通过npm可以对node中的包进行上传、下载、搜索等操作
- npm会在安装完node以后,自动安装
- npm的常用指令
npm -v 查看npm的版本
npm version 查看所有模块的版本
npm init 初始化项目(创建package.json)
npm i/install 包名 安装指定的包
npm i/install 包名 --save 安装指定的包并添加依赖
npm i/install 包名 -g 全局安装(一般都是一些工具)
npm i/install 安装当前项目所依赖的包
npm s/search 包名 搜索包
npm r/remove 包名 删除一个包
文件系统(File System)
- Buffer(缓冲区)
- Buffer和数组的结构的非常类似,Buffer是用来存储二进制数据的
- Buffer的方法
- Buffer.from(字符串)
- 将一个字符串中内容保存到一个buffer中
- buf.toString()
- 将buffer转换为一个字符串
- Buffer.alloc(size)
- 创建一个指定大小的buffer对象
- Buffer.allocUnsafe(size)
- 创建一个指定大小的buffer对象,可以包含敏感数据
- fs模块
- 在Node通过fs模块来对系统中的文件进行操作,fs模块是node中已经继承好了,不需要在使用npm下载,直接引入即可
- 引入fs
var fs = require("fs");
- fs模块中的大部分操作都提供了两种方法,同步方法和异步方法
同步方法带sync
异步方法没有sync,都需要回调函数
- 写入文件
1.同步写入
2.异步写入
3.简单写入
4.流式写入
- 读取文件
1.同步读取
2.异步读取
3.简单读取
4.流式读取
- 方法
- 打开文件
fs.open(path, flags[, mode], callback)
fs.openSync(path, flags[, mode])
- 读写文件
fs.write(fd, string[, position[, encoding]], callback)
fs.writeSync(fd, string[, position[, encoding]])
fs.read(fd, buffer, offset, length, position, callback)
fs.readSync(fd, buffer, offset, length, position)
- 关闭文件
fs.close(fd,callback)
fs.closeSync(fd);
- 简单文件读取和写入
fs.writeFile(file, data[, options], callback)
fs.writeFileSync(file, data[, options])
fs.readFile(path[, options], callback)
fs.readFileSync(path[, options])
- 流式文件读取和写入
- 流式读取和写入适用于一些比较大的文件
fs.createWriteStream(path[, options])
fs.createReadStream(path[, options])
mongodb安装
SQL
- 结构化查询语言
- 关系数据库全都同SQL来操作
1.安装MongoDB
- 安装
- 配置环境变量
C:\Program Files\MongoDB\Server\3.2\bin
- 在c盘根目录
- 创建一个文件夹 data
- 在data中创建一个文件夹db
- 打开cmd命令行窗口
- 输入 mongod 启动mongodb服务器
- 32位注意:
启动服务器时,需要输入如下内容
mongod --storageEngine=mmapv1
mongod --dbpath 数据库路径 --port 端口号
- 在打开一个cmd窗口
- 输入 mongo 连接mongodb ,出现 >
- 数据库(database)
- 数据库的服务器
- 服务器用来保存数据
- mongod 用来启动服务器
- 数据库的客户端
- 客户端用来操作服务器,对数据进行增删改查的操作
- mongo 用来启动客户端
- 将MongoDB设置为系统服务,可以自动在后台启动,不需要每次都手动启动
1.在c盘根目录创建data
- 在data下创建db和log文件夹
2.创建配置文件
在目录 C:\Program Files\MongoDB\Server\3.2 下添加一个配置文件
mongod.cfg
3.以管理员的身份打开命令行窗口
4.执行如下的命令
sc.exe create MongoDB binPath= "\"C:\Program Files\MongoDB\Server\3.2\bin\mongod.exe\" --service --config=\"C:\Program Files\MongoDB\Server\3.2\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"
sc.exe create MongoDB binPath= "\"mongod的bin目录\mongod.exe\" --service --config=\"mongo的安装目录\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"
5.启动mongodb服务
6.如果启动失败,证明上边的操作有误,
在控制台输入 sc delete MongoDB 删除之前配置的服务
然后从第一步再来一次
- 基本概念
数据库(database)
集合(collection)
文档(document)
- 在MongoDB中,数据库和集合都不需要手动创建,
当我们创建文档时,如果文档所在的集合或数据库不存在会自动创建数据库和集合
- 基本指令
show dbs
show databases
- 显示当前的所有数据库
use 数据库名
- 进入到指定的数据库中
db
- db表示的是当前所处的数据库
show collections
- 显示数据库中所有的集合
- 数据库的CRUD(增删改查)的操作
- 向数据库中插入文档
db.<collection>.insert(doc)
- 向集合中插入一个文档
- 例子:向test数据库中的,stus集合中插入一个新的学生对象
{name:"孙悟空",age:18,gender:"男"}
db.stus.insert({name:"孙悟空",age:18,gender:"男"})
db.<collection>.find()
- 查询当前集合中的所有的文档
插入文档.js
db.stus.insert({name:"猪八戒",age:28,gender:"男"});
db.stus.insert([
{name:"沙和尚",age:38,gender:"男"},
{name:"白骨精",age:16,gender:"女"},
{name:"蜘蛛精",age:14,gender:"女"}
]);
db.stus.insert({_id:"hello",name:"猪八戒",age:28,gender:"男"});
db.stus.find();
ObjectId()
删除文档.js
db.stus.insert([
{
name:"zbj",
isDel:0
},
{
name:"shs",
isDel:0
},
{
name:"ts",
isDel:0
}
]);
db.stus.updateOne({name:"ts"},{$set:{isDel:1}});
db.stus.find({isDel:0})
文档查询.js
db.stus.find({_id:"hello"});
db.stus.find({age:16 , name:"白骨精"});
db.stus.find({age:28});
db.stus.findOne({age:28});
db.stus.find({}).count();
修改文档.js
db.stus.find({});
db.stus.update({name:"沙和尚"},{age:28});
db.stus.update(
{"_id" : ObjectId("59c219689410bc1dbecc0709")},
{$set:{
gender:"男",
address:"流沙河"
}}
)
db.stus.update(
{"_id" : ObjectId("59c219689410bc1dbecc0709")},
{$unset:{
address:1
}}
)
db.stus.updateMany(
{"name" : "猪八戒"},
{
$set:{
address:"猪老庄"
}
}
);
db.stus.update(
{"name" : "猪八戒"},
{
$set:{
address:"呵呵呵"
}
} ,
{
multi:true
}
)
db.stus.find()
第二天
笔记
MongoDB
- MongoDB是一个NoSQL的数据库
- MongoDB是一款文档型数据库
- 数据库指的就是一个存储数据的仓库
数据库可以使我们完成对数据的持久化的操作
- MongoDB数据库中存储的数据的基本单位就是文档,
MongoDB中存储的就是文档,所谓文档其实就是一个“JSON”
- MongoDB中的“JSON”我们称为BSON,比普通的JSON的功能要更加的强大
- MongoDB数据库使用的是JavaScript进行操作的,在MongoDB含有一个对ES标准实现的引擎,
在MongoDB中所有ES中的语法中都可以使用
- MongoDB的基本的指令
- 启动服务器
mongod --dbpath 路径 --port 端口号
- 启动客户端
mongo
- MongoDB的CRUD的操作
- 基本操作
use 数据库
- 进入指定的数据库
show dbs
- 显示所有的数据库
show collections
- 显示数据库中所有的集合
db
- 显示当前所在的数据库
- 向数据库中插入文档
- db.collection.insert()
- insert()可以向集合中插入一个或多个文档
- db.collection.insertOne()
- 向集合中插入一个文档
- db.collection.insertMany()
- 向集合中插入多个文档
- 查询数据库中的文档
- db.collection.find()
- 可以根据指定条件从集合中查询所有符合条件的文档
- 返回的是一个数组
- db.collection.findOne()
- 查询第一个符合条件的文档
- 返回的是一个对象
- db.collection.find().count()
- 查询符合条件的文档的数量
- 修改数据库中的文档
- db.collection.update()
- 可以修改、替换集合中的一个或多个文档
- db.collection.updateOne()
- 修改集合中的一个文档
- db.collection.updateMany()
- 修改集合中的多个文档
- db.collection.replaceOne()
- 替换集合中的一个文档
- 删除集合中的文档
- db.collection.remove()
- 删除集合中的一个或多个文档(默认删除多个)
- db.collection.deleteOne()
- 删除集合中的一个文档
- db.collection.deleteMany()
- 删除集合中的多个文档
- 清空一个集合
db.collection.remove({})
- 删除一个集合
db.collection.drop()
- 删除一个数据库
db.dropDatabase()
练习1.js
use my_test
db.users.insert({
username:"sunwukong"
});
db.users.find();
db.users.insert({
username:"zhubajie"
});
db.users.find();
db.users.find().count();
db.users.find({username:"sunwukong"});
db.users.update({username:"sunwukong"},{$set:{address:"huaguoshan"}});
db.users.replaceOne({username:"zhubajie"},{username:"tangseng"});
db.users.update({username:"sunwukong"},{$unset:{address:1}});
db.users.update({username:"sunwukong"},{$set:{hobby:{cities:["beijing","shanghai","shenzhen"] , movies:["sanguo","hero"]}}});
db.users.find();
db.users.update({username:"tangseng"},{$set:{hobby:{movies:["A Chinese Odyssey","King of comedy"]}}})
db.users.find({'hobby.movies':"hero"});
db.users.update({username:"tangseng"},{$push:{"hobby.movies":"Interstellar"}});
db.users.update({username:"tangseng"},{$addToSet:{"hobby.movies":"Interstellar"}});
db.users.find();
db.users.remove({"hobby.cities":"beijing"});
db.users.remove({});
db.users.drop();
show dbs;
for(var i=1 ; i<=20000 ; i++){
db.numbers.insert({num:i});
}
db.numbers.find()
db.numbers.remove({});
var arr = [];
for(var i=1 ; i<=20000 ; i++){
arr.push({num:i});
}
db.numbers.insert(arr);
练习2.js
db.numbers.find({num:500})
db.numbers.find({num:{$gt:500}});
db.numbers.find({num:{$eq:500}});
db.numbers.find({num:{$lt:30}});
db.numbers.find({num:{$gt:40 , $lt:50}});
db.numbers.find({num:{$gt:19996}});
db.numbers.find({num:{$lte:10}});
db.numbers.find().limit(10);
db.numbers.find();
db.numbers.find().skip(10).limit(10);
db.numbers.find().skip(20).limit(10);
db.numbers.find().limit(10).skip(10);
练习3.js
db.dept.find()
db.emp.find()
db.emp.find({sal:{$lt:2000}});
db.emp.find({sal:{$lt:2000 , $gt:1000}});
db.emp.find({$or:[{sal:{$lt:1000}} , {sal:{$gt:2500}}]});
var depno = db.dept.findOne({dname:"财务部"}).deptno;
db.emp.find({depno:depno});
var depno = db.dept.findOne({dname:"销售部"}).deptno;
db.emp.find({depno:depno});
db.emp.find({mgr:7698})
db.emp.updateMany({sal:{$lte:1000}} , {$inc:{sal:400}});
db.emp.find()
文档间的关系.js
db.wifeAndHusband.insert([
{
name:"黄蓉",
husband:{
name:"郭靖"
}
},{
name:"潘金莲",
husband:{
name:"武大郎"
}
}
]);
db.wifeAndHusband.find();
db.users.insert([{
username:"swk"
},{
username:"zbj"
}]);
db.order.insert({
list:["牛肉","漫画"],
user_id: ObjectId("59c47e35241d8d36a1d50de0")
});
db.users.find()
db.order.find()
var user_id = db.users.findOne({username:"zbj"})._id;
db.order.find({user_id:user_id});
db.teachers.insert([
{name:"洪七公"},
{name:"黄药师"},
{name:"龟仙人"}
]);
db.stus.insert([
{
name:"郭靖",
tech_ids:[
ObjectId("59c4806d241d8d36a1d50de4"),
ObjectId("59c4806d241d8d36a1d50de5")
]
},{
name:"孙悟空",
tech_ids:[
ObjectId("59c4806d241d8d36a1d50de4"),
ObjectId("59c4806d241d8d36a1d50de5"),
ObjectId("59c4806d241d8d36a1d50de6")
]
}
])
db.teachers.find()
db.stus.find()
sort和投影.js
db.emp.find({}).sort({sal:1,empno:-1});
db.emp.find({},{ename:1 , _id:0 , sal:1});
mongoose
01.helloMongoose.js
var mongoose = require("mongoose");
mongoose.connect("mongodb://127.0.0.1/mongoose_test" , { useMongoClient: true});
mongoose.connection.once("open",function(){
console.log("数据库连接成功~~~");
});
mongoose.connection.once("close",function(){
console.log("数据库连接已经断开~~~");
});
mongoose.disconnect();
02.mongoose_demo.js
var mongoose = require("mongoose");
mongoose.connect("mongodb://127.0.0.1/mongoose_test",{useMongoClient:true});
mongoose.connection.once("open",function () {
console.log("数据库连接成功~~~");
});
var Schema = mongoose.Schema;
var stuSchema = new Schema({
name:String,
age:Number,
gender:{
type:String,
default:"female"
},
address:String
});
var StuModel = mongoose.model("student" , stuSchema);
StuModel.create({
name:"白骨精",
age:16,
address:"白骨洞"
},function (err) {
if(!err){
console.log("插入成功~~~");
}
});
03.model.js
var mongoose = require("mongoose");
mongoose.connect("mongodb://127.0.0.1/mongoose_test",{useMongoClient:true});
mongoose.connection.once("open",function () {
console.log("数据库连接成功~~~");
});
var Schema = mongoose.Schema;
var stuSchema = new Schema({
name:String,
age:Number,
gender:{
type:String,
default:"female"
},
address:String
});
var StuModel = mongoose.model("student" , stuSchema);
StuModel.count({},function (err , count) {
if(!err){
console.log(count);
}
});
04.document.js
var mongoose = require("mongoose");
mongoose.connect("mongodb://127.0.0.1/mongoose_test",{useMongoClient:true});
mongoose.connection.once("open",function () {
console.log("数据库连接成功~~~");
});
var Schema = mongoose.Schema;
var stuSchema = new Schema({
name:String,
age:Number,
gender:{
type:String,
default:"female"
},
address:String
});
var StuModel = mongoose.model("student" , stuSchema);
var stu = new StuModel({
name:"奔波霸",
age:48,
gender:"male",
address:"碧波潭"
});
StuModel.findOne({},function (err , doc) {
if(!err){
doc = doc.toObject();
delete doc.address;
console.log(doc._id);
}
});
package.json
{
"name": "03.mongoose",
"version": "0.0.1",
"dependencies": {
"mongoose": "^4.11.12"
}
}