MongoDB的基本用法

数据库相关概念

在一个数据库软件中可以包含多个数据仓库,在每个数据仓库中可以包含多个数据集合,每个数据集合中可以包含多条文档(具体的数据)

 

术语:

database 数据库,mongoDB 数据库阮家中可以建立多个数据库

collection  集合,一组数据的集合,可以理解为JavaScript中的数组

document 文档,一条具体的数据,可以理解为JavaScript中的对象

filed 字段,文档中的属性名称,可以理解为javascript 中的对象属性

 

操作数据库

使用node.js 操作数据库需要依赖Node.js 的第三方包 mongoose

运行安装命令

 

npm i mongoose

 

连接数据库

1 const mongoose = require('mongoose')
2 
3 mongoose.connect('mongodb://localhost/test1', { useNewUrlParser: true })
4 .then(() => console.log('数据库连接成功'))
5 .catch( err => console.log('数据连接失败' + err))

  

创建数据库

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

 

增删改查操作

创建集合:

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

(创建集合后,这时数据库并不会显示这个集合,只有当插入数据后,才会真正创建。)

1 // 设定集合规则
2 const courseSchema = new mongoose.Schema({
3   name: String,
4   author: String,
5   isPublished: Boolean
6 })
7 // 创建集合并应用规则
8 const Course = mongoose.model('Course', courseSchema)

 

创建文档:

创建文档实际上就是向集合中插入数据。

分为两步:1)创建集合实例。2)调用实例对象下的save方法将数据保存到数据库当中。

1 // 插入数据
2 const course = new Course ({
3   name: 'node',
4   author: 'zhangsan',
5   isPublished: true
6 })
7 course.save()

 

向数据库导入数据

命令: mongoimport -d 数据库名称 -c 集合名称 --flile 要导入的数据文件

在导入数据之前,需要确保mongodb 已经设置了环境变量,如果没有设置,需要把mongodb/bin 目录添加到系统环境中。在设置好环境变量之后重启,就可以使用命令行执行操作了。

 

示例:

mongoimport -d test1 -c uesr1 --file  ./user.json

 

查询文档

查找所有数据

xxx.find() 方法: 返回一组符合条件的数据

xxx.find({查找条件}).then( res => console.log( res )

// 查询集合中所有文档
// Course.find().then(res => console.log('查询结果' + res))

// 根据 _id  查找文档
Course.find({ _id: '5d343c27d201764240160daf' }).then(res => console.log('查询结果' +res))

 

查询一个数据

xxx.findOne() 方法: 返回一个文档 

//  xxx.findOne() 方法 返回一条文档,默认返回的是第一条文档,()中可以添加查找条件
Course.findOne().then( res => console.log(res))

Course.findOne({name: 'node'}).then( res => console.log( res ))

 

条件匹配查询

xxx.find()

// 匹配数值范围 $gt 大于的意思, $lt 小于的意思, 查询 User 文档中 age 字段 大于 20 小于 50 的数据
User.find({ age: { $gt: 20, $lt: 50 } }).then(res => console.log(res))

// 匹配包含  $in 是 匹配包含的意思
User.find( {hobbies: { $in: ['足球'] }}).then(res => console.log(res))

// 选择要查询的字段  (只查询 name 和 email 字段 并排除 _id 字段 ) -字段名 可以排除查询到的字段
User.find().select( 'name email -_id').then( res => console.log(res))

// 将数据按照 age 字段 进行升序排列
User.find().sort('age').then( res => console.log(res) )

// 将数据按照 age 字段 进行降序排列 字段前面加 - 表示降序排列
User.find().sort('-age').then( res => console.log(res) )

//  skip 跳过多少条数据 limit 限制查询数量
User.find().skip(2).limit(5).then( res => console.log(res))

 

删除文档

const mongoose = require('mongoose')

mongoose.connect('mongodb://localhost/test1', { useNewUrlParser: true })
.then(() => console.log('数据库连接成功'))
.catch( err => console.log('数据连接失败' + err))

// 设定集合规则
const courseSchema = new mongoose.Schema({
  name: String,
  author: String,
  isPublished: Boolean
})
// 创建集合并应用规则
const Course = mongoose.model('Course', courseSchema)

// 删除一个
Course.findOneAndDelete({_id: '5d343ab3981298416bd26998'}).then( res => console.log(res))

// 删除多条文档  不添加条件默认删除所有文档,返回值 ok 等于 表示删除成功, n 代表删除数据的条数
Course.deleteMany({}).then(res => console.log(res))

 

修改文档

const mongoose = require('mongoose')

mongoose.connect('mongodb://localhost/test1', { useNewUrlParser: true })
.then(() => console.log('数据库连接成功'))
.catch( err => console.log('数据连接失败' + err))

// 设定集合规则
const courseSchema = new mongoose.Schema({
  name: String,
  author: String,
  isPublished: Boolean
})
// 创建集合并应用规则
const Course = mongoose.model('Course', courseSchema)

// 修改单个
// xxx.updateOne({查询条件}, {要修改的值}).then(res => console.log(res))
// 修改文档的一个字段, updataOne() 里面需要传两个参数,第一是要修改的字段,第二个修改成的内容
Course.updateOne({author: 'lisi'},  {author: 'wangwu'}).then(res => console.log(res))

// 修改多个 查询条件不写,则修改所有
// xxx.updateMany({查询条件}, {要修改的值}).then( res => console.log(res))
Course.updateMany({}, {name: 'javascript'}).then( res => console.log(res))

 

转载于:https://www.cnblogs.com/liea/p/11221346.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值