Mongoose的安装与增删改查

迈不过友情╰ 2023-07-07 08:27 74阅读 0赞

Mongoose官网

1. 安装Mongoose

创建文件夹,里面添加 package.json, 执行

  1. npm install mongoose

如果安装的过程报

  1. npm install mongoose
  2. npm ERR! code EJSONPARSE
  3. npm ERR! file D:\Ddata\Mongoose\package.json
  4. npm ERR! JSON.parse Failed to parse json
  5. npm ERR! JSON.parse Unexpected end of JSON input while parsing near ''
  6. npm ERR! JSON.parse Failed to parse package.json data.
  7. npm ERR! JSON.parse package.json must be actual JSON, not just JavaScript.
  8. npm ERR! A complete log of this run can be found in:
  9. npm ERR! C:\Users\DELL\AppData\Roaming\npm-cache\_logs\2020-02-21T13_02_33_915Z-debug.log

在package.json里面添加一些字段,如

  1. {
  2. "name": "Mongoose"
  3. }

之后重新执行命令

2. 项目中引入 Mongoose

js 文件

  1. const mongoose = require("mongoose");

3. 连接 MongoDB 数据库

mongoose.connect('mongodb://数据库的ip地址:端口号/数据库名');

如果端口号是默认端口号(27017) 则可以省略不写

  1. 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.

  1. mongoose.connect(DB_URL, { useNewUrlParser: true, useUnifiedTopology: true })

4. 监听 MongoDB 数据库的连接状态

mongoose 对象中,有一个属性叫做 connection,该对象表示的就是数据库连接,通过监视该对象的状态,可以来监听数据库的连接与断开

  • 数据库连接成功的事件, mongoose.connection.once("open",function(){})

    mongoose.connection.once(“open”,function(){

    1. console.log("数据库连接成功~~~");

    });

  • 数据库断开的事件, mongoose.connection.once("close",function(){})

    mongoose.connection.once(“close”,function(){

    1. console.log("数据库连接已经断开~~~");

    });

终端输入 node test.js,输出数据库连接成功,表示连接成功

5. Mongoose 里,一切都始于Schema

  1. //将mongoose.Schema 赋值给一个变量
  2. var Schema = mongoose.Schema;
  3. //创建Schema(模式)对象
  4. var stuSchema = new Schema({
  5. name: String,
  6. age: Number,
  7. gender: {
  8. type: String,
  9. default: "female"
  10. },
  11. address: String
  12. });
  • 通过 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(“插入成功~~~”); }});

示例:

  1. 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) {

    1. console.log('修改成功')

    }
    })

4. 删除

Model.remove(conditions, [callback])
Model.deleteOne(conditions, [callback])
Model.deleteMany(conditions, [callback])
  1. stuModel.remove({ name: "白骨精" }, function (err) {
  2. if (!err) {
  3. console.log("删除成功")
  4. }
  5. })

5. count

Model.count(conditions, [callback]) , 统计文档数量
  1. StuModel.count({ }, function (err, count) {
  2. if (!err) {
  3. console.log(count);
  4. }
  5. });

发表评论

表情:
评论列表 (有 0 条评论,74人围观)

还没有评论,来说两句吧...

相关阅读