一,Mongoose的使用:
提示:一般不直接用MongoDB的函数来操作MongoDB数据库 Mongoose是一套操作MongoDB数据库的API.
1.安装mongoose:
//这种方式安装我出过错
npm i mongoose --save
//我选择镜像安装
npm install -g cnpm --registry=https://registry.npm.taobao.org
//使用cnpm安装成功
cnpm i mongoose --save
创建新的文件夹006mongoose
在文件内创建一个package.js文件
三种基本模式的介绍:
1.Schema:
通俗理解:schema是字段属性模型(骨架)
- String
- Number
- Date
- Buffer
- Boolean
- Mixed
- ObjectId
- Array
- Decimal128
2.Model:
Model是从Schema编译来的构造函数(由schema创建),有了Model就可以对数据库进行增删改操作;Document就是Model的实例.
3.Document:
Mongoose document 代表着 MongoDB 文档的一对一映射。 每个 document 都是他的 Model 的实例。
参考:Mongoose中文文档
数据库的连接:
简要步骤:
1.安装Mongoose:
cnpm i mongoose --save
2.在项目中引用mongoose:
var mongoose = require("");
3.connect连接数据库
mongoose.connect("");
4.监听数据库连接状态
//打开连接
mongoose.connection.once(“open”, func);
//断开连接
mongoose.connection.once(“close”, func);
5.数据库断开连接:
// 一般情况只需要连接一次,连接一次以后,除非项目停止服务关闭,否则连接一般不会断开
mongoose.disconnect()
代码演示:
<script>
//1.引用mongoose
var mongoose = require("mongoose");
//连接数据库
/*
mongodb://ip地址:port/dbName;
useNewUrlParser:true -->避免“不建议使用当前URL字符串解析器”警告
useUnifiedTopology:true -->避免当前"服务器发现和监视引擎已弃用"出现警告;true使用新的服务器和监视引擎
*/
mongoose.connect("mongodb://localhost:27017/mongoose_test", {useNewUrlParser:true, useUnifiedTopology:true});
mongoose.connection.once("open", function () {
console.log("数据库已连接");
});
mongoose.connection.once("close", function () {
console.log("数据库已断开");
});
mongoose.disconnect();
</script>
Schema和Model应用:
代码演示:
<script>
//1.引用mongoose
var mongoose = require("mongoose");
//连接数据库
/*
mongodb://ip地址:port/dbName;
useNewUrlParser:true -->避免“不建议使用当前URL字符串解析器”警告
useUnifiedTopology:true -->避免当前"服务器发现和监视引擎已弃用"出现警告;true使用新的服务器和监视引擎
*/
mongoose.connect("mongodb://localhost:27017/mongoose_test", {useNewUrlParser:true, useUnifiedTopology:true});
mongoose.connection.once("open", function () {
console.log("数据库已连接");
});
//将mongoose.Schema赋值一个变量来保存
var Schema = mongoose.Schema;
//创建Schema对象
//创建一个学生字段模型
var stuSchema = new Schema({
name:String,
age:Number,
gender:{
type:String,
default:"女",
},
address:String,
});
//通过Schema创建Model对象
/*
Model代表的是数据库中的集合,通过Model才能对数据库进行操作
mongoose.model(modelName, schema) modelName:集合名,schema:用的哪个约束
*/
var StuModel = mongoose.model('student',stuSchema);
//插入文档并测试
StuModel,create({
name:"唐三",
age:22,
gender:"男",
address:"圣魂村",
}, function(err){
if(!err){
console.log("数据插入成功!");
}else{
console.log("数据插入失败!");
}
});
</script>
插入多条数据:
<script>
StuModel.create([
{
name:"宁荣荣",
age:21,
address:"七宝琉璃宗",
},
{
name:"朱竹青",
age:21,
address:"星斗罗帝国",
},
], function (err) {
if(!err){
console.log("创建数据成功!");
}else{
console.log("创建数据失败!");
}
});
</script>
查询多条数据:
<script>
//Model.findOne({},{skip:number,limit:number},function(){});:查询一条
//Model.findById('_id',"name age -_id",function(){});
/*
"name age -_id":相当于MongoDB里的投影:{name:1, age:1, _id:0}
*/
StuModel.find({},"name age -_id", function(err,doc){
if(!err){
console.log(docs);
}else{
console.log("数据不存在!");
}
});
<script>
删除数据:
<script>
StuModel.remove({"name":"小奥"},function (err) {
if(!err){
console.log("删除成功!");
}
});
</script>
更新数据:
<script>
StuModel.update({"name":"小奥"},{$set:{"age":19}}function (err) {
if(!err){
console.log("更新完成!");
}
});
</script>
Document应用:
代码演示:
<script>
var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost:27017/mongoose_test", {useNewUrlParser:true, useUnifiedTopology:true});
mongoose.connection.once("open", function(){
console.log("数据库连接成功!");
});
var Schema = mongoose.Schema;
var stuSchema = new Schema({
name:String,
age:Number,
gender:{
type:String,
default:"女",
},
address:String,
});
var StuModel = mongoose.model("student", stuSchema);
/*
Document的方法:
Model#save({[options], [fn]})
*/
var stu = new StuModel({
name:"戴沐白",
age: 22,
gender:"男",
address:"星斗罗帝国",
});
stu.save(function(err){
if(!err){
console.log("保存成功!");
}
});
StuModel.findOne({"name":'唐三'}, function (err,docs) {
/*if(!err){
console.log(docs);
}*/
/*docs.update({$set:{age:28}}, function (err) {
if(!err){
console.log("修改成功");
}
});*/
// 修改第二种写法
/*docs.age = '20';
docs.save();*/
//get(name):获取文档中指属性值
//set(name, value):设置文档属性
//console.log(docs.get("name"));
//console.log(docs.name);
//console.log(docs.set("name", "朱晓"));
//toObject():转换为普通js对象以后,注意所有的Document对象的方法或属性都不能使用
//var o = docs.toObject();
//console.log(o);
//转换为普通对象
//docs = docs.toObject();
});
<script>
优化代码:
1.准备工作:
在项目文件夹下创建–>models文件夹–>student.js文件
在项目文件夹下创建–>loadMongodb.js
在项目文件夹下创建–>documents.js
<script>
//loadMondb.js:用来封装数据库连接
var mongoose = require('mongoose');
mongoose.connect("mongodb://localhost:27017/mongoose_test",{useUnifiedTopology:true, useNewUrlParser:true});
mongoose.connection.once('open', function (err) {
if(!err){
console.log("数据库连接成功");
}else{
console.log("数据库连接失败!");
}
});
//modules存放字段属性(创建的模型),student.js为例子
//引用mongoose
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var stuSchema = new Schema({
name:String,
age:Number,
gender:{
type:String,
default:"女",
},
address:String,
});
var StuModel = mongoose.model('student', stuSchema);
//exports.model = StuModel;
//提供模块对外需要的结构,
module.exports = StuModel;
/*
documents.js:通过model查询的结构都是Document对象
*/
require("./loadMongodb");
/*
student.js这种写法exports.model = StuModel;
对应document.js中:var student=require("./models/student").model;
*/
var student = require("./models/student");
//console.log(student);
student.find({}, function (err, doc) {
if(!err){
console.log(doc);
}
});
<script>