node 使用 mongoose 操作 mongodb 数据库 导入数据

本文详细介绍使用Mongoose操作MongoDB数据库的全过程,包括数据库连接、集合设计、数据操作等核心内容,涵盖创建、查询、更新及删除文档的多种方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,使用官方的 mongodb 包来操作

https://github.com/mongodb/node-mongodb-native

2,使用第三方 mongoose 来操作 MongoDB 数据库

mongoose 是基于 MongoDB 官方的 mongodb 包再一次做了封装
官网 https://mongoosejs.com/
中文版 http://www.mongoosejs.net/

安装

npm i mongoose

使用

使用前要连接mongoDB net start mongoDB

基本步骤
创建数据库

在 mongoDB 中不需要显式创建数据库, 如果正在使用的数据库不存在, MongoDB 会自动创建。

连接数据库
const express = require("express")
const mongoose = require("mongoose")
const app = express()

// 27017是mongoDB 的默认端口
// 使用mongoose提供的connect方法连接数据库 
// 不用管 usertable 存不存在,没有的话会在插入第一条数据库的时候创建
mongoose.connect('mongodb://localhost/usertable',{useUnifiedTopology: true,useNewUrlParser: true}).then(()=>{
    console.log('数据库链接成功')
}).catch(err=>{
    console.log('数据库链接失败',err)
})

app.listen(3000,()=>{
    console.log("mongoose测试 服务器启动")
})
设计集合

1 对集合设定规则 2 创建激活 创建 mongoose.Schema构造函数的实例即可创建

// 1 连接数据库 usertable
mongoose.connect("mongodb://localhost/usertable",{useUnifiedTopology: true,useNewUrlParser: true})

// 2 设计集合 (表结构,文档结构)  设定集合规则
// 字段名称就是表结构中的属性名称
// 约束:是为了保证数据的完整性,不要有脏数据
var userScrema = new Schema({
    usernmae:{
        type: String,   
        required: true,  //userNmae不能为空
        default:0,  //默认值
    },
    password:{
        type: String,   
        required: true  
    },
    gender:{
        type:Number,
        enum:[0,1],  //取值范围
        default:0
    },
    email:{
        type: String
    },


    // hobbies:[String] // 值是数组 且每一项都是字符串
    created_time:{ //创建时间
        type: Date,
        // 这里不要写 Date.now() 会即时调用 默认值就固定了
        // 当 new Model 的时候,如果没有传递 create_time 则mongoose就会调用default 指定方法
        default: Date.now
    },
    last_modified_time:{ //最后一次修改时间
        type: Date,
        default: Date.now
    },
    sex:{  //性别
        type:Number,
        enum:[-1, 0, 1], // 取值区间 保密 男 女
        default: -1
    },
    
})

// 3 把集合发布为模型
// mongoose.model 将一个集合发布为模型
//    第一个参数:传入一个大写名词单数据字符串来表示你的 数据表名称
//               mongoose 会自动将大写名词的字符串生成 小写复数 的集合名称
//               User --> users
//    第一个参数:文档结构
//    返回值:模型构造函数
var User = mongoose.model("User",userScrema)


// 4 操作数据  users

操作数据 users 支持.then

创建文档 create
// 创建多条 User.create([{...},{...},...]).then((ret)=>{console.log(ret) })
User.create({
    usernmae: "张三2--2",
    password: "123",
    email: "email@email.com"
},(err, ret)=>{
	console.log(ret) //当前插入的文档
})
// 或者
User.create({
    usernmae: "张三2--2",
    password: "123",
    email: "email@email.com"
}).then((ret)=>{
	console.log(ret) //当前插入的文档
}).catch(err=>{
})
增 save
var admin = new User({
    usernmae: "张三",
    password: "123",
    email: "email@email.com"
})
admin.save(function(err,ret){
    if(err){
        console.log("保存失败")
    }else{
        console.log("保存成功",ret)
    }
})
查询文档
查询所有 find
User.find(function(err,ret){ 
    if(err){
        console.log("查询失败")
    }else{
        console.log("查询成功:",ret)
    }
})
条件查询 返回数组 find
User.find({ usernmae:"张三"},function(err,ret){ 
    if(err){
        console.log("查询失败")
    }else{
        console.log("查询成功:",ret)
    }
})
条件查询的第一个 返回对象 findOne
User.findOne({usernmae:"张三"},function(err,ret){ 
    if(err){
        console.log("查询失败")
    }else{
        console.log("查询成功:",ret)
    }
})
findOne没有条件 获取第一条数据
User.findOne().then(res=>console.log("查询成功:",res))
// 或者
User.findOne(function(err,ret){ 
    if(err){
        console.log("查询失败")
    }else{
        console.log("查询成功:",ret)
    }
})
匹配大于 小于 find

匹配大于20 小于50

User.find({age:{&gt:20,&lt:50}}).then(res=>console.log(res))
匹配包含 $in

匹配 hobbies 字段(['敲代码','打豆豆'])中包含 '敲代码’的数据

User.find({hobbies:{&in:['敲代码']}}).then(res=>console.log(res))
查询某个字段的值 select

select 传入要查询的字段 多个以空格隔开 如果要排除某个字段-name加短斜杠

User.find().select('usernmae email').then(res=>console.log(res))

在这里插入图片描述
排除id

User.find().select('usernmae email -_id').then(res=>console.log(res))

在这里插入图片描述

对查询出来的数据排序 sort

年龄排列 升序sort('age') 降序 sort('-age')

User.find().sort('age').then(res=>console.log(res))
skip 跳过多少条 limit 查询数量 可用于分页

从 跳过前2条开始查询 10条数据 可用于分页

User.find().skip(2).limit(10),then(res=>console.log(res))
删除文档
删除多条数据 remove deleteMany

删除 usernmae 为张三的所要文档

// 如果传 {} 会删除 User集合中的所要文档
// 返回 {n:4,ok:1} n删除的数据条数 ok:1成功0失败
User.deleteMany({usernmae:"张三"}).then(res=>console.log("删除成功:",res))
// 或者
// 返回 { n: 0, ok: 1, deletedCount: 0 }
User.remove({usernmae:"张三"}).then(res=>console.log("删除成功:",res))
删除一条数据 findOneAndDelete findOneAndRemove

查找一条文档并删除 (如果匹配了多条,会删除第一条) 返回删除的文档

User.findOneAndDelete({password:"123"}).then(res=>console.log("删除成功:",res))
// 或者
User.findOneAndRemove({password:"123"}).then(res=>console.log("删除成功:",res))

根据id删除一条数据

User.findByIdAndRemove()
更新文档
更新多条数据 updateMany update

根据条件更新所有
如果传 {} 会更新所要文档

// updateMany({查询条件},{要修改的值})
// 返回 { n: 2, nModified: 2, ok: 1 }  nModified修改的数据
User.updateMany({gender:0},{gender:1}).then(res=>console.log("更新成功:",res))
// 或者
// 返回 { n: 2, nModified: 2, ok: 1 }
User.update({},{gender:1}).then(res=>console.log("更新成功:",res))
更新一条数据 updateOne findOneAndUpdate
// updateOne({查询条件},{要修改的值})
// 返回  { n: 1, nModified: 1, ok: 1 }
User.updateOne({gender:0},{gender:1}).then(res=>console.log("更新成功:",res))
// 或者
// 返回 修改后的文档对象 
User.findOneAndUpdate({gender:1},{gender:0}).then(res=>console.log("更新成功:",res))

根据id更新一条数据

User.findByIdAndUpdate('5dfc3026fcd1f338ac1541ce',{password:"456789"}).then(res=>console.log("更新成功:",res))

mongoDB 导入数据

添加可执行命令

mongoimport -d 数据库名称 -c 集合名称 --file 要导入的数据文件

user.json

{
    "nmae":"admin3",
    "password":"456789",
    "hobbies":["敲代码"],
    "email":"email@email.com"
}
// 或
[{...},{...},...]

导入 usertable数据库 users表 数据文件目录 user.json

mongoimport -d usertable -c user2 --file ./user.json

当json 是数组的时候 要加上

mongoimport -d usertable -c user2 --jsonArray --file ./user.json

在这里插入图片描述
在 MongoDB Compass 可查看数据

添加多条数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值