Mongoose的安装与增删改查
Mongoose官网
1. 安装Mongoose
创建文件夹,里面添加 package.json, 执行
npm install mongoose
如果安装的过程报
npm install mongoose
npm ERR! code EJSONPARSE
npm ERR! file D:\Ddata\Mongoose\package.json
npm ERR! JSON.parse Failed to parse json
npm ERR! JSON.parse Unexpected end of JSON input while parsing near ''
npm ERR! JSON.parse Failed to parse package.json data.
npm ERR! JSON.parse package.json must be actual JSON, not just JavaScript.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\DELL\AppData\Roaming\npm-cache\_logs\2020-02-21T13_02_33_915Z-debug.log
在package.json里面添加一些字段,如
{
"name": "Mongoose"
}
之后重新执行命令
2. 项目中引入 Mongoose
js 文件
const mongoose = require("mongoose");
3. 连接 MongoDB 数据库
mongoose.connect('mongodb://数据库的ip地址:端口号/数据库名');
如果端口号是默认端口号(27017) 则可以省略不写
mongoose.connect("mongodb://127.0.0.1/mongoose_test" );
如果连接过程报错:
报错:DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
mongoose.connect(DB_URL, { useNewUrlParser: true, useUnifiedTopology: true })
4. 监听 MongoDB 数据库的连接状态
在 mongoose
对象中,有一个属性叫做 connection
,该对象表示的就是数据库连接,通过监视该对象的状态,可以来监听数据库的连接与断开
数据库连接成功的事件,
mongoose.connection.once("open",function(){})
mongoose.connection.once(“open”,function(){
console.log("数据库连接成功~~~");
});
数据库断开的事件,
mongoose.connection.once("close",function(){})
mongoose.connection.once(“close”,function(){
console.log("数据库连接已经断开~~~");
});
终端输入 node test.js,输出数据库连接成功
,表示连接成功
5. Mongoose 里,一切都始于Schema
//将mongoose.Schema 赋值给一个变量
var Schema = mongoose.Schema;
//创建Schema(模式)对象
var stuSchema = new Schema({
name: String,
age: Number,
gender: {
type: String,
default: "female"
},
address: String
});
- 通过
Schema
来创建Model
Model
代表的是数据库中的集合,通过Model
才能对数据库进行操作mongoose.model(modelName, schema)
modelName
就是要映射的集合名mongoose
会自动将集合名变成复数var StuModel = mongoose.model(“student”, stuSchema);//向数据库中插入一个文档//StuModel.create(doc, function(err){});StuModel.create({ name: “白骨精”, age: 16, address: “白骨洞”}, function (err) { if (!err) { console.log(“插入成功~~~”); }});
示例:
const mongoose = require('mongoose');mongoose.connect("mongodb://127.0.0.1/mongoose_test");mongoose.connection.once("open", function () { console.log("数据库连接成功")})const 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("插入成功") }});
#
1. 插入
Model.create(doc(s), [callback])
- 用来创建一个或多个文档并添加到数据库中
参数:doc(s) 可以是一个文档对象,也可以是一个文档对象的数组,callback 当操作完成以后调用的回调函数
stuModel.create([ { name: “沙和尚”, age: 38, gender: “male”, address: “高老庄” }], function (err) { if (!err) { console.log(arguments) }});
2. 查找
Model.find(conditions, [projection], [options], [callback])
查询所有符合条件的文档 总会返回一个数组
stuModel.find({ name: “唐僧” }, function (err, docs) { if (!err) { console.log(docs[0].name) console.log(docs) }})// 返回所有stuModel.find({}, function (err, docs) { if (!err) { console.log(docs) }})// 设置想要返回的列。1就是返回,0 就是不返回stuModel.find({}, { name: 1, _id: 0 }, function (err, docs) { if (!err) { console.log(docs) }})// 想要什么属性就写进去,不想要的前面添加 - 号stuModel.find({}, “name age -_id”, { skip: 3, limit: 2 }, function (err, docs) { if (!err) { console.log(docs) }})
Model.findById(id, [projection], [options], [callback])
根据文档的id属性查询文档
stuModel.findById(“5e50633b4b61703ad80ab427”, function (err, doc) { if (!err) { console.log(doc.name) }})
Model.findOne([conditions], [projection], [options], [callback])
查询符合条件的第一个文档总和返回一个具体的文档对象
// 具体的文档对象stuModel.findOne({}, function (err, doc) { if (!err) { console.log(doc.name) }})
conditions 查询的条件
projection 投影 需要获取到的字段
两种方式
- {name:1,_id:0}
- “name -_id”
options 查询选项(skip limit)
- {skip:3 , limit:1}
callback 回调函数,查询结果会通过回调函数返回。回调函数必须传,如果不传回调函数,压根不会查询
3.修改
Model.update(conditions, doc, [options], [callback])
Model.updateMany(conditions, doc, [options], [callback])
Model.updateOne(conditions, doc, [options], [callback])
Model.replaceOne(conditions, doc, [options], [callback])
用来修改一个或多个文档
参数:
- conditions 查询条件
- doc 修改后的对象
- options 配置参数
callback 回调函数
stuModel.updateOne({ name: “唐僧” }, { $set: { age: 20 } }, function (err) {
if (!err) {console.log('修改成功')
}
})
4. 删除
Model.remove(conditions, [callback])
Model.deleteOne(conditions, [callback])
Model.deleteMany(conditions, [callback])
stuModel.remove({ name: "白骨精" }, function (err) {
if (!err) {
console.log("删除成功")
}
})
5. count
Model.count(conditions, [callback]) , 统计文档数量
StuModel.count({ }, function (err, count) {
if (!err) {
console.log(count);
}
});
还没有评论,来说两句吧...