JS-操作MongoDB

一,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>

look

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>
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值