首页 > 数据库 >MongoDB

MongoDB

时间:2023-12-31 16:11:34浏览次数:33  
标签:console log err MongoDB mongoose const 数据

  • MongoDB 的特点:数据分层管理

    在 MySQL 里面:

      1 个 DBMS(数据库管理系统)可以有很多 DB(数据库)

      1 个 DB 里面可以有很多 table(表)

      1 个 table 里面可以有很多条 data(数据)

    在 MongoDB 里面:

      1个 DBMS 可以有很多 DB

      1个 DB 里面可以有很多 collection(集合)

      1个 collection 里面可以有很多条 document(文档)

      

 

  •  文档(document)的增删改查

    新增数据:进入到某一个集合页面,点击 ADD DATA,可以选择直接导入 josn 文件,也可以手动写入 json 数据

    新增数据时,id不是必须的,但必须保证 id 的唯一性,如果有重复的 id 会报错

    

    查找数据:documents 下面的 options 选项可以选择查找数据的条件,以及数据的正序倒序

    

    修改数据,删除数据,可以在数据上直接操作

    

     导出数据,可以选择导出符合条件的数据,也可以选择导出全部数据,导出的数据为 json 格式

    

 

  •  BSON

    JSON 是字符串类型的,但 MongoDB 存储数据到硬盘,需要存储二进制数据

    BSON = Binary JSON 即二进制类型的 JSON

    

  • nosql

    sql,关系型数据库,如 mysql,oracle,sql server

    nosql,非关系数据库(not only sql),如 MongoDB,Redis

     关系型数据库需要另外学习 sql 语言,如 select,insert,uodate,delete等

    非关系型数据库无需用 sql 语句查询,易学易用

 

  • nodejs 连接 MongoDB(实现数据的增删查改)
// 连接Mongodb数据库, 使用Mongodb的驱动程序
// 1. 引入mongodb模块
const MongoClient = require("mongodb").MongoClient;
// 2. 定义连接地址
const url = "mongodb://127.0.0.1:27017";
// 3. 定义数据库名称
const dbName = "myDB";
// 4. 连接数据库
MongoClient.connect(
    url,
    {
        useUnifiedTopology: true,
        useNewUrlParser: true,
    },
    (error, client) => {
        if (error) {
            console.log(error);
            return;
        }
        console.log("连接成功");
        // 选择数据库
        const db = client.db(dbName);
        //选择合集
        const userCollection = db.collection("users");
        //查询所有数据
        userCollection.find().toArray((err, result) => {
            if(err){
                console.log(err);
                return;
            }
            console.log(result);
        })
        //查询结果按倒序排序
        userCollection.find().sort({age: -1}).toArray((err, result) => {
            if(err){
                console.log(err);
                return;
            }
            console.log(result);
        })
        //条件查询
        userCollection.find({username: "zhangsan-1"}).sort().toArray((err, result) => {
            if(err){
                console.log(err);
                return;
            }
            console.log(result);
        })
        //新增数据,返回插入几条数据,插入数据的id
        userCollection.insertOne({
            username: "lisi",
            age: 44,
            password: "123456-lisi",
            email: "[email protected]",
            gender: "unknown",
        },
        (err, result) => {
            if(err){
                console.log(err);
                return;
            }
            console.log(result.insertedCount, result.insertedId);
        })
        //修改数据
        userCollection.updateMany(
            { username: "lisi"},
            { $set: { age: 77, gender: "female"},},
            (error, result) => {
                if(error){
                    console.log(error);
                    return;
                }
                //打印结果,modifiedCount表示修改的数据条数
                console.log(result.modifiedCount);
            })
        //删除数据,需要先写查询条件,符合条件的数据会被删去,会返回 deleteCount,删除的条数
        userCollection.deleteOne({
            username: "zhangsan-1"
        },
        (error,result) => {
            if(error){
                console.log(error);
                return;
            }
            console.log(result.deleteCount);
        })
        client.close(db);
    }
);

 

 

  • mongoose

    mongoDB 的数据格式过于灵活,可以插入任何数据,不受限制,实际项目开发时,要有数据格式的规范

    mongooes 可以提供这种规范,用 Schema 定义数据格式的规范,用 Model 规范 collection,还可以规范数据操作的 api

    可以先使用脚手架,搭建 koa2 项目,然后添加 mongooes,命令为 npm i mongoose

    使用 mongoose 连接数据库:

//数据库设置
const mongoose = require("mongoose");
const url = 'mongodb://127.0.0.1:27017';
const dbName = 'module_mongo';

//开始连接
mongoose.connect(`${url}/${dbName}`);
const coon = mongoose.connection;

//监听连接状态
coon.on("error",(err) => console.log(err));
coon.on("open",() => console.log("数据库连接成功!"));

//导出
module.exports = mongoose;

 

  • 使用 mongoose 创建数据模型

    所谓数据模型,就是规范数据格式用的,mongoose 可以提供这种规范,用 schema 定义数据格式的规范(类似于表结构),用 Model 规范 collection,还可以规范数据操作的 api

    定义数据模型:

//引入 mongoose
const mongoose = require("mongoose");

//定义 schema
const UserSechema = mongoose.Schema(
    {
        username: {
            type: String, //字符串类型
            required: true, //是否必须写
            unique: true, //是否唯一
        },
        age: {
            type: Number, //数字类型
            default: 0, //可以不传,默认值是0
        },
        password: {
            type: String, //字符串类型
            required: true, // 必传
        },
        email: {
            type: String,
            default: "" //默认为空
        },
        gender: {
            type: String,
            default: "male", //默认为 male
        }
    },
    {
        timestamps: true, // 配置,自动添加时间戳,用来记录数据的创建时间和修改时间
    }
)

// 给 collection 绑定规则
// 定义 model,第一个参数对应 collection 的单数(如 collection 是 users,第一个参数就是 user),第二个参数对应规则
const User = mongoose.model("user", UserSechema);

//导出
module.exports = {
    User,
};

 

 

  • 使用 mongoose 进行数据的 增删查改
// 导入 model
const { User } = require("./model")

//立即执行函数 !( function(){} )()
//新增数据
!(async () => {
    const lisi = await User.create({
        username: "lisi-1",
        password: "123456",
        age: 23,
    });
    console.log(lisi);
})();

//查询数据,会返回一个数组,查询到多少都会是一个数组
!(async () => {
    const  userlist = await User.find();
    console.log(userlist);
})()

//条件查询
!(async () => {
    const  userlist = await User.find({ username: "lisi-1"});
    console.log(userlist);
})()

//单条数据查询:findOne,会返回一个对象,如果没查到返回 null
//如果查询到的有多条,返回第一个
!(async () => {
    const  userlist = await User.findOne({ username: "lisi-1"});
    console.log(userlist);
})()

//更新数据:找到第一条符合条件的数据并更新
!(async () => {
    const  updateResult = await User.findOneAndUpdate(
        { username: "lisi-1"},//查询条件
        { age: 44},//更新的内容
        { new: true}//返回更新后的数据
        );
    console.log(updateResult);
})()

//删除数据,找到第一条符合条件的数据并删除
!(async () => {
    const  deleteResult = await User.deleteOne(
        { gender: "female"},//查询条件
        );
    //deletedCount:删除的数据条数
    console.log(deleteResult.deletedCount);
})()

 

  • 完善留言板路由功能(post请求)

  首先连接数据库

//引入 mongoose
const mongoose = require('mongoose')
const url = 'mongodb://127.0.0.1:27017'
const dbName = 'myDB'

//连接
mongoose.connect(`${url}/${dbName}`);
const coon = mongoose.connection;

coon.on('error',(err) => {
    console.log(err);
})
coon.on('open',() => {
    console.log("数据库连接成功");
})

//导出
module.exports = mongoose;

 

  然后设置数据格式

 //定义数据结构 //引入 mongoose const mongoose = require('./index')
const commentSchema = mongoose.Schema(     {         username: {             type: String,             required: true,         },         content: {          type: String,             required: true,         }     },     {         timestamps: true,     } );
//定义 model const comment = mongoose.model('comments',commentSchema) //导出 module.exports = {     comment, }

   最后新建路由,设置方法

const router = require('koa-router')()
//导入 model
const { comment } = require('../db/model')

//设置前缀
router.prefix('/comment')

//设置路由,获取评论列表
router.get('/list', async (ctx, next) => {
    // 获取 queryString
    const query = ctx.query;
    // 用户想查询多少条,默认五条
    const queryNumber = query.number || 5;
    //查询数据库
    const commentList = await comment.find().sort({ createdAt: -1}).limit(queryNumber);
    //返回 json 
    ctx.body = {
        errno: 0,
        message:`获取留言列表成功!共有${commentList.length}条留言`,
        data:commentList
    };
});

//设置路由,新增评论
router.post('/create', async (ctx, next) => {
    //获取请求体
    const body = ctx.request.body;
    const { content, username } = body;
    //把数据添加到数据库
    const newContent = await comment.create({
        content,
        username,
    });
    //设置响应体
    ctx.body = {
        errno: 0,
        message: "留言成功",
        data: newContent,
    }
})

//导出路由
module.exports = router

  别忘了注册路由,在 app.js 中

标签:console,log,err,MongoDB,mongoose,const,数据
From: https://www.cnblogs.com/geol4/p/17936766

相关文章

  • 前端歌谣-第陆拾玖课-MongoDB之node操作实现数据库增删改查
    前言大家好我是歌谣今天给大家带来的是MongoDB关于node操作数据库的讲解依赖配置需要安装express-genetator脚手架创建项目配置文件{"name":"myapp","version":"0.0.0","private":true,"scripts":{"start":"node./bin/w......
  • MongoDB 基础
    MongoDB是一个高性能、开源、面向文档的数据库,设计用于存储大量的数据。它使用类似于JSON的BSON格式来存储数据,这使得数据结构更加灵活,可以存储复杂的类型,如数组和嵌套文档。基本概念文档(Document):MongoDB的数据结构是基于文档的,一个文档是一个键值对的集合,类似于JSON......
  • MongoDB Oplogs 到底都记录了什么 与 智者老冯
    最近董宇辉的事情,让我意识到,如果光一味的搞技术,那么对于人生和生活是不完整的,后序在撰写一些技术文章的时候,会带有一些对于当前热点事件的一些感触和反思,也希望能找到一些有同样想法的人,终究人生的道路是孤独的,如果在孤独中能找到一些人能对你有一些共鸣,那是一件幸福的事情。这里先......
  • MongoDB 通配符索引 (wildcard index) 的利与弊
    MongoDB支持在单个字段或多个字段上创建索引,以提高查询性能。MongoDB支持灵活的模式,这意味着文档字段名在集合中可能会有所不同。使用通配符索引可支持针对任意或未知字段的查询。·一个集合中可以创建多个通配符索引·通配符索引可以覆盖与集合中其他索引相同的字段·通配符......
  • mongodb安装
    #!/bin/bash###############################################################FileName:install_redis.sh#Version:V1.0#Author:junwang#Organization:#CreatedTime:2021-04-1417:12:54#Description:###############################################......
  • Windows下安装MongoDB实践总结
    本文记录Windows环境下的MongoDB安装与使用总结。【1】官网下载官网下载地址:DownloadMongoDBCommunityServer|MongoDB这里可以选择下载zip或者msi,zip是解压后自己配置,msi是傻瓜式一键安装。这里我们分别对比进行实践。【2】ZIP包实践①解压将上面下载的ZIP包进行解压,如下所示......
  • Python MongoDB 聚合管道操作符及使用
    ​ 1、$match筛选文档,类似于SQL的WHERE子句。可以使用$match来选择满足特定条件的文档。使用示例:PythonMongoDB聚合管道操作符及使用-CJavaPy2、$group分组和汇总数据,类似于SQL的GROUPBY子句。你可以使用$group来对文档进行分组,并进行聚合操作,如计算总和、......
  • mongoDB-使用总结($group 、$unwind、$cond等)
    1.按年分库表联合查询db.collection_2023_3.aggregate({$set:{_id:'2023_3'}},{$unionWith:{coll:'collection_2023_4',pipeline:[{$set:{_id:"2023_4"}}]}}) 2.多字段分组{$group:{_id:{data_time:......
  • mongoDB取日周月年
    1.$dateFromString字符串转时间类型{$dateFromString:{dateString:<dateStringExpression>,  //要转化的时间字符串format:<formatExpression>,  //转换的格式,’%Y-%m-%dT%H:%M:%S.%LZ‘   timezone:<tzExpression>,  //指定时区onError:<......
  • MongoDB限定条件的查询语句
    在MongoDB里面查询语句使用如下:--限定条件进行查询db.getCollection('source_news').find("_id":{$in:[28829497251611,28829497251535,28829497251452,28829497251359,28829497251276,28829497251238,28829497251130,28829497250977,28829497250914,28829497......