首页 > 其他分享 >Mongoose基本使用

Mongoose基本使用

时间:2023-07-01 14:23:07浏览次数:47  
标签:基本 console log err mongoose connection Mongoose 使用 data

Mongoose基本使用

Mongoose

Mongoose是一个对象文档模型库,官网

Mongoose方便使用代码操作mongodb数据库

参考:MongoDB基础入门MongoDB官网MongoDB中文网

使用示例:

//1. 安装 mongoose 
// npm install mongoose

//2. 导入 mongoose
const mongoose = require('mongoose');
//3. 连接数据库
mongoose.connect('mongodb://127.0.0.1:27017/bilibili');

//4. 设置连接回调
//连接成功
mongoose.connection.on('open', () => {
    console.log('连接成功');
    //5. 创建文档结构对象
    let BookSchema = new mongoose.Schema({
        title: String,
        author: String,
        price: Number
    });

//6. 创建文档模型对象
let BookModel = mongoose.model('book', BookSchema);

//7. 插入文档
BookModel.create({
        title: '西游记',
        author: '吴承恩',
        price: 19.9
    }, 
    (err, data) => {
        if (err) throw err;

        //输出 data 对象
        console.log(data);
        //8. 断开连接
        mongoose.disconnect();
    });
});

//连接出错
mongoose.connection.on('error', () => {
    console.log('连接出错~~');
})

//连接关闭
mongoose.connection.on('close', () => {
    console.log('连接关闭');
})

字段类型

文档结构可选的常用字段类型列表

类型 描述
String 字符串
Number 数字
Boolean 布尔值
Array 数组,也可以使用 [] 来标识
Date 日期
Buffer Buffer 对象
Mixed 任意类型,需要使用 mongoose.Schema.Types.Mixed 指定
ObjectId 对象 ID,需要使用 mongoose.Schema.Types.ObjectId 指定
Decimal128 高精度数字,需要使用 mongoose.Schema.Types.Decimal128 指定

字段值验证

Mongoose有一些内建验证器,可以对字段值进行验证

{
    title: {
        type: String,
        required: true // 设置必填项
    },

    author: {
        type: String,
        default: '匿名' //默认值
    },

    gender: {
        type: String,
        enum: ['男','女'] //设置的值必须是数组中的
    },

    username: {
        type: String,
        unique: true // 唯一值 unique 需要 重建集合 才能有效果
    },

}

CURD

数据库的基本操作包括四个,增加(create),删除(delete),修改(update),查(read)

// 插入一条
SongModel.create({
        title:'给我一首歌的时间',
        author: 'Jay'
    }, 
    function(err, data){
        //错误
        console.log(err);
        //插入后的数据对象
        console.log(data);
});


// 批量插入
PhoneModel.insertMany([
    {
        brand:'华为',
        color:'灰色',
        price:2399,
        tags:['电量大','屏幕大','信号好']
    },
    {
        brand:'小米',
        color:'白色',
        price:2099,
        tags:['电量大','屏幕大','信号好']
    }],
    (err,data)=>{
    if(err) throw err;
    console.log('写入成功');
    mongoose.connection.close();
})

// 删除一条数据
SongModel.deleteOne(
    {_id:'5dd65f32be6401035cb5b1ed'}, 
    function(err){
        if(err) throw err;
        console.log('删除成功');
        mongoose.connection.close();
    }
)

// 批量删除
SongModel.deleteMany({author:'Jay'}, 
function(err){
    if(err) throw err;
    console.log('删除成功');
    mongoose.connection.close();
})

// 更新一条数据
SongModel.updateOne({author: 'JJ Lin'}, {author: '林俊杰'}, 
function (err) {
    if(err) throw err;
    mongoose.connection.close();
})

// 批量更新数据
SongModel.updateMany({author: 'Leehom Wang'}, {author: '王力宏'}, function (err) {
    if(err) throw err;
    mongoose.connection.close();
})

// 查询一条数据
SongModel.findOne({author: '王力宏'}, 
function(err, data){
    if(err) throw err;
    console.log(data);
    mongoose.connection.close();
})

//根据 id 查询数据
SongModel.findById('5dd662b5381fc316b44ce167',
function(err, data){
    if(err) throw err;
    console.log(data);
    mongoose.connection.close();
})

//不加条件查询
SongModel.find(function(err, data){
    if(err) throw err;
    console.log(data);
    mongoose.connection.close();
});

//加条件查询
SongModel.find({author: '王力宏'}, 
function(err, data){
    if(err) throw err;
    console.log(data);
    mongoose.connection.close();
});

条件控制

mongodb不能 > < >= <= !== 等运算符,需要使用转义符

  • > 使用 $gt
  • < 使用 $lt
  • >= 使用 $gte
  • <= 使用 $lte
  • !== 使用 $ne

b.students.find({id:{$gt:3}}); id号比3大的所有的记录

逻辑运算

$or逻辑或的情况

db.students.find({$or:[{age:18},{age:24}]});

$and逻辑与的情况

db.students.find({$and: [{age: {$lt:20}}, {age: {$gt: 15}}]});

正则匹配

条件中可以直接使用 JS 的正则语法,通过正则可以进行模糊查询

db.students.find({name:/imissyou/});

返回指定字段

//0:不要的字段
//1:要的字段
SongModel.find()
.select({_id:0,title:1})
.exec(function(err,data){
    if(err) throw err;
    console.log(data);
    mongoose.connection.close();
});

数据排序

//sort 排序
//1:升序
//-1:倒序
SongModel.find()
.sort({hot:1})
.exec(function(err,data){
    if(err) throw err;
    console.log(data);
    mongoose.connection.close();
});

数据截取

//skip 跳过 limit 限定
SongModel.find()
.skip(10)
.limit(10)
.exec(function(err,data){
    if(err) throw err;
    console.log(data);
    mongoose.connection.close();
})

标签:基本,console,log,err,mongoose,connection,Mongoose,使用,data
From: https://www.cnblogs.com/wdszh/p/17510340.html

相关文章

  • 使用python paramiko模块将本地文件上传到远程主机的指定目录
    使用python paramiko模块将本地文件上传到远程主机的指定目录这个代码首先定义了本地文件名和远程文件名,然后使用datetime模块获取当前日期和时间,并使用字符串格式化功能生成了远程目录和文件名。在这个示例中,远程目录是/path/to/remote/directory/年份/月份/日期/,文件名是小时-......
  • 使用python生成随机密码
    使用python生成随机密码,密码长度13位,一般密码文件不能以?和!开头的,需要将这两个开头的密码文件排除掉。有两种方式。第一种方式importrandomimportstring#定义密码长度password_length=13#定义密码字符集合password_characters=string.ascii_letters+string.d......
  • 传奇架设登录器无法使用?解决乱码问题的方法在这里!
    近年来,传奇架设已经成为了一款备受欢迎的网络游戏。然而,有些玩家在使用传奇架设登录器的过程中可能会遇到一些问题,其中之一就是乱码问题。如果你正困扰于传奇架设登录器无法使用或乱码问题,那么你来对地方了!本文将为你详细介绍解决传奇架设登录器乱码问题的方法。首先,让我们先了解一......
  • Debug-logcat使用
    注释掉一行关键代码运行应用,应用崩溃了解决方案:在LogCat中寻找最后一个异常及其栈跟踪的第一行(对应着源代码)这里是问题发生的地方,也是寻找解决方案的最佳起点......
  • 如何使用libavfilter库给输入文件input.yuv添加视频滤镜?
    一.视频滤镜初始化本次代码实现的是给输入视频文件添加水平翻转滤镜,在视频滤镜初始化部分我们可以分为以下几步进行:1.创建滤镜图结构视频滤镜功能最核心的结构为滤镜图结构,即AVFilterGraph结构,我们调用avfilter_graph_alloc()函数就可以创建一个滤镜图结构。......
  • 激光测距传感器TOFSense的使用
    随笔记-获取TOFSense的数据TOFSenseTOFSense是Nooploop深圳空循环的一款激光测距传感器,前面的黑框就是激光发射与接收的地方。模块激光发射视场角有27°,也就是说实际上模块打出去的激光覆盖范围是一个顶点在黑框上,类似圆锥的形状参考下图,打出的是范围激光但只输出一个值,看模块手......
  • 3、apache-kylin-3.1.3-bin-hadoop3基本操作(创建model和cube、数据查詢)
    apache-kylin-3.1.3-bin-hadoop3系列文章1、apache-kylin-3.1.3-bin-hadoop3介绍及部署、验证详解2、apache-kylin-3.1.3-bin-hadoop3集群部署3、apache-kylin-3.1.3-bin-hadoop3基本操作(创建model和cube、数据查詢)4、apache-kylin-3.1.3-bin-hadoop3增量构建、全量构建详细示例......
  • 使用火焰图分析.NET的 start-up 期间花费的时间
    本文将告诉你从“dotnetrun”到“helloworld”,如何使用PerfView来分析.NET运行时在启动期间所花费的时间。代码示例在这个示例中,我故意只关注.NET运行时在程序启动(start-up)过程中的操作,以确保运行的用户代码最少,因此只有以下的“HelloWorld”:usingSystem;namespace......
  • 基本数据类型(primitive type)
    数据类型数据类型分为基本数据类型(primitivetype)和引用数据类型(referencetype)基本数据类型(primitivetype)数值类型整数类型浮点类型字符类型boolean类型引用数据类型(referencetype)类接口数组八大基本数据类型byte,占1个字节(1B),表示整数范围:-128--127sh......
  • [C#] 使用 ReadConsoleInput 所需要注意的问题.
    如果要使用鼠标输入,那么需要:启用鼠标输入,只有启用之后,才能接收到鼠标事件关闭控制台的快速编辑模式,很多人的控制台都启用了快速编辑模式,它会导致鼠标输入无效任何情况下,都需要:不使用除ReadConsoleInput之外的任何输入方法,因为它们会和你争抢ReadConsoleInput的......