nodejs操作mongodb数据库 - 连接数据库和增删改查

连接数据库

nodejs连接数据库需要借助第三方库 mongoose

npm install mongoose
yarn add mongoose

使用mongoose提供对的connent方法即可连接数据库

//				mongodb协议		地址    数据库名(没有的话会自动创建)
mongoose.connect("mongodb://localhost/playground")
	.then(() => console.log("数据库连接成功"))
	.catch(e => console.log("数据库连接失败",e))

mongodb查询条件

$or 或关系
$nor 或关系取反
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$ne 不等于
$in 在多个值范围内
$nin 不在多个值范围内
$all 匹配数组中多个值
$regex 正则,用于模糊查询
$size 匹配数组大小
$maxDistance 范围查询,距离(基于LBS)
$mod 取模运算
$near 邻域查询,查询附近的位置(基于LBS)
$exists 字段是否存在
$elemMatch 匹配内数组内的元素
$within 范围查询(基于LBS)
$box 范围查询,矩形范围(基于LBS)
$center 范围醒询,圆形范围(基于LBS)
$centerSphere 范围查询,球形范围(基于LBS)
$slice 查询字段集合中的元素(比如从第几个之后,第N到第M个元素)

mongodb增删改查

1、创建集合
创建集合分为两步,一是对对集合设定规则,二是创建集合,创建mongoose.Schema构造函数的实例即可创建集合

const mongoose = require("mongoose");

mongoose.connect("mongodb://localhost/playground").then(() => {
    console.log("数据库连接成功")
}).catch(e => {
    console.log("数据库连接失败",e)
})

// 设置规则
const courseSchema = new mongoose.Schema({
    // 文档中可以添加的字段
    name: String,
    author: String,
    isPubliched: Boolean
})
// 注:只有给数据库添加了数据,才能看到该数据库
// 创建集合,返回的是构造函数  (集合名字    配置的规则)    在数据库中集合名字是course
const Course = mongoose.model("Course",courseSchema); // courses

2、创建文档
有两种方法

  • 实例化集合的构造函数时传入数据,并保存到数据库
    分为两步
    • 创建集合的实例
    • 使用集合实例下的save()方法将数据保存在数据库中
const course = new Course({
    name:"nodejs basic",
    author: "hmteacher",
    isPubliched: true
})
course.save();
  • 使用集合构造函数的静态方法create()
    参数1:要添加的文档
    参数2:回调函数:参数1:错误信息;参数2:添加的数据
Fly.create({
    name:"dog",
    action:"eat"
},(err,doc) => {
    if(err){
        console.log("添加失败",err);
        return;
    }
    console.log(doc);
})

也可以使用Promise的方式

Fly.create({
    name:"dog",
    action:"eat"
}).then(doc => {
	console.log(doc)
}).catch(err => {
	console.log(err)
})

3、mongodb数据库导入数据
mongoimport -d 数据库名称 -c 集合名称 --file 要导入的数据文件
如果是数组的样式
mongoimport -d 数据库名称 -c 集合名称 --jsonArray 要导入的数据文件
4、查询文档
    1. 查询语句

  • find() 根据条件查询文档(条件为空则查找所有文档),返回Promise对象
    查询所有数据
const mongoose = require("mongoose");

mongoose.connect("mongodb://localhost/playground").then(() => {
    console.log("连接成功")
}).catch(e => {
    console.log("连接失败",e)
})
// 创建集合规则
const userSchema = new mongoose.Schema({
	name:String,
    age:Number,
    email:String,
    password:String,
    hobbies:[String]
})
// 分配规则
const users = mongoose.model("users",userSchema);
users.find().then(res => {
    console.log(res);
})
// 返回的是一个数组
users.find({_id:"6242fdea62e4817b23769ccd"}).then(res =>{
    console.log(res)
})
  • findOne() 根据条件查询文档,只返回一条数据,条件若为空则默认返回集合中的第一条文档
users.findOne({name:"张三"}).then(res => {
    console.log(res)
})

    2. 查询条件匹配

  • 匹配大于($gt)小于($lt)
// 大于20小于23
users.find({age:{$gt:20,$lt:23}}).then(res => {
    console.log(res);
})
  • 匹配包含($in)
users.find({hobbies:{$in:["写PHP"]}}).then(res => {
    console.log(res)
})
  • 选择要查询的字段(select("字段名多个字段名用空格隔开 "))
users.find().select("name email").then(res => {
    console.log(res)
})
// 查询到的结果默认是带有_id的,若不想要_id,则需要在_id前加个负号(-)如下:
users.find().select("name email -_id").then(res => {
    console.log(res)
})
  • 将查询到的数据进行排序(sort(“字段名”)),默认是升序排列,降序需要在字段名前加负号(-)
// 升序
users.find().sort("age").then(res => {
    console.log(res)
})
// 降序
users.find().sort("-age").then(res => {
    console.log(res)
})
  • 分页(skip(n)跳过n条数据,limit(n)限制查询数量)
users.find().skip(2).limit(2).then(res => {
    console.log(res)
})

5 、 删除文档

  • findOneAndDelete({}) 删除单个文档,条件若是为空,默认删除第一条,删除成功返回被删除的数据,删除失败返回null
users.findOneAndDelete({_id:"6242fdea62e4817b23769cd1"}).then(res => {
    console.log(res);
})
  • deleteMany({})删除多个,条件为空,默认删除全部文档。删除成功后返回一个对象{ acknowledged: true, deletedCount: 4 }"acknowledged"表示删除成功否,"deletedCount"表示删除的条数

6、更新文档

  • updateOne({查询条件},{要修改的值}) 修改单条数据,返回一个对象
    {
    acknowledged: true,
    modifiedCount: 1,
    upsertedId: null,
    upsertedCount: 0,
    matchedCount: 1
    }
users.updateOne({name:"张三"},{name:"狗蛋"}).then(res => {
    console.log(res)
})
  • updateMany({查询条件},{要修改的值}) 修改多条,返回一个对象
users.updateMany({},{age:60}).then(res => {
    console.log(res)
})
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 安装依赖 安装`express`、`mongoose`、`body-parser`和`cors`: ``` npm install express mongoose body-parser cors --save ``` 2. 连接数据库 在`app.js`中连接数据库: ```javascript const express = require('express'); const mongoose = require('mongoose'); const bodyParser = require('body-parser'); const cors = require('cors'); const app = express(); // 连接数据库 mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true }); const db = mongoose.connection; db.on('error', console.error.bind(console, '连接错误:')); db.once('open', function() { console.log('连接成功'); }); app.use(bodyParser.json()); app.use(cors()); app.listen(3000, () => console.log('服务器已启动')); ``` 3. 定义模型 在`models`文件夹下创建`user.js`文件,定义用户模型: ```javascript const mongoose = require('mongoose'); const userSchema = new mongoose.Schema({ name: String, age: Number, gender: String, }); const User = mongoose.model('User', userSchema); module.exports = User; ``` 4. 增加数据 在`app.js`中增加路由,实现增加用户功能: ```javascript const express = require('express'); const mongoose = require('mongoose'); const bodyParser = require('body-parser'); const cors = require('cors'); const User = require('./models/user'); const app = express(); // 连接数据库 mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true }); const db = mongoose.connection; db.on('error', console.error.bind(console, '连接错误:')); db.once('open', function() { console.log('连接成功'); }); app.use(bodyParser.json()); app.use(cors()); // 增加用户 app.post('/users', (req, res) => { const user = new User({ name: req.body.name, age: req.body.age, gender: req.body.gender, }); user.save((err, user) => { if (err) { console.error(err); res.sendStatus(500); } else { res.json(user); } }); }); app.listen(3000, () => console.log('服务器已启动')); ``` 5. 查询数据 在`app.js`中增加路由,实现查询用户功能: ```javascript const express = require('express'); const mongoose = require('mongoose'); const bodyParser = require('body-parser'); const cors = require('cors'); const User = require('./models/user'); const app = express(); // 连接数据库 mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true }); const db = mongoose.connection; db.on('error', console.error.bind(console, '连接错误:')); db.once('open', function() { console.log('连接成功'); }); app.use(bodyParser.json()); app.use(cors()); // 增加用户 app.post('/users', (req, res) => { const user = new User({ name: req.body.name, age: req.body.age, gender: req.body.gender, }); user.save((err, user) => { if (err) { console.error(err); res.sendStatus(500); } else { res.json(user); } }); }); // 查询用户 app.get('/users', (req, res) => { User.find((err, users) => { if (err) { console.error(err); res.sendStatus(500); } else { res.json(users); } }); }); app.listen(3000, () => console.log('服务器已启动')); ``` 6. 更新数据 在`app.js`中增加路由,实现更新用户功能: ```javascript const express = require('express'); const mongoose = require('mongoose'); const bodyParser = require('body-parser'); const cors = require('cors'); const User = require('./models/user'); const app = express(); // 连接数据库 mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true }); const db = mongoose.connection; db.on('error', console.error.bind(console, '连接错误:')); db.once('open', function() { console.log('连接成功'); }); app.use(bodyParser.json()); app.use(cors()); // 增加用户 app.post('/users', (req, res) => { const user = new User({ name: req.body.name, age: req.body.age, gender: req.body.gender, }); user.save((err, user) => { if (err) { console.error(err); res.sendStatus(500); } else { res.json(user); } }); }); // 查询用户 app.get('/users', (req, res) => { User.find((err, users) => { if (err) { console.error(err); res.sendStatus(500); } else { res.json(users); } }); }); // 更新用户 app.put('/users/:id', (req, res) => { User.findByIdAndUpdate(req.params.id, { $set: { name: req.body.name, age: req.body.age, gender: req.body.gender, }, }, { new: true }, (err, user) => { if (err) { console.error(err); res.sendStatus(500); } else { res.json(user);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值