Node之使用Mongoose操作MongoDB

5 篇文章 0 订阅
2 篇文章 0 订阅

在上一篇博客里介绍了MongoDB数据库,也基本上感知了MongoDB的基本用法,这一篇将介绍一下如何在node中使用mongodb

一、在Node中如何操作MongoDB 数据库

使用官方的MongoDB包来操作

https://www.npmjs.com/package/mongodb
在上边有官方的教程和步骤(比较源生)

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

mongoose是一个基于MongoDB官方的做了再一次封装的mongodb包
Mongoose

1. 装包

npm init -y
npm install --save mongoose

2. 基本感知

我们创建demo1,然后将官网上的代码直接拿过来,我在下面进行了注释
然后打开cmd 输入mongod 连接mongodb,再运行下面代码

// 引包
var mongoose = require('mongoose');
//连接 MongoDB 数据库
mongoose.connect('mongodb://localhost/test');
mongoose.Promise = global.Promise;
//创建一个模型(设计数据库)
 var Cat = mongoose.model('Cat', { name: String });
  // 实例化一个 Cat
 var kitty = new Cat({ name: '喵喵'})
   // 持久化保存 kitty 实例
kitty.save(function (err) {
    if (err) {
      console.log(err);
    } else {
      console.log('meow');
    }
  });

当我们运行该段代码会输出 meow
输出

然后我们可以再打开一个cmd 输入mongo 然后输入 show dbs查看当前数据库
查看当前数据库

就会出现test,说明mongdb是动态的。
我们可以切换到test数据库下查看当前集合和集合中的数据

use test
show collections
db.cats.find

查看数据

那个students是我之前建立的
输出100个meow


// 引包
var mongoose = require('mongoose');
//连接 MongoDB 数据库
mongoose.connect('mongodb://localhost/test');
mongoose.Promise = global.Promise;
//创建一个模型(设计数据库)
 var Cat = mongoose.model('Cat', { name: String });
  for(var = 0; i < 100; i++) {
    var kitty = new Cat({ name: '喵喵' + i})
    kitty.save(function (err) {
        if (err) {
            console.log(err);
        } else {
            console.log('meow');
        }
    });
}

二、 Mongoose 基本感知

1. 连接数据库

连接的是本机的test数据库,如果想改就可以改
注意:指定连接的数据库不需要存在,当你插入第一条数据之后就会自动被创建出来

mongoose.connect(‘mongodb://localhost/test’)

2. 设计文档结构(表结构)

字段名称就是表结构中的属性名称,值可以是其他类型(js数据类型)
需要对字段进行约束,约束的目的是为了保证数据的完整性,不要有脏数据

var userSchema = new Schema({
  username: {
    type: String,
    required: true // 必须有
  },
  password: {
    type: String,
    required: true
  },
  email: {
    type: String
  }
})

3. 将文档结构发布为模型

mongoose.model 方法就是用来将一个架构发布为 model

  • 第一个参数:传入一个大写名词单数字符串用来表示你的数据库名称,mongoose 会自将大写名词的字符串生成 小写复数 的集合名称,例如这里的 User 最终会变为 users 集合名称

  • 第二个参数:架构 Schema

  • 返回值:模型构造函数

var User = mongoose.model(‘User’, userSchema)

下面附上源码


var mongoose = require('mongoose')

var Schema = mongoose.Schema
//连接数据库
mongoose.connect('mongodb://localhost/test')

var userSchema = new Schema({
  username: {
    type: String,
    required: true // 必须有
  },
  password: {
    type: String,
    required: true
  },
  email: {
    type: String
  }
})

var User = mongoose.model('User', userSchema)

三、 基本操作

1. 新增数据

我插入了一条name为zs的数据


//新增数据
var admin = new User({
    username: 'zs',
    password: '123456',
    email: 'admin@admin.com'
})

admin.save(function (err, ret) {
  if (err) {
    console.log('保存失败')
  } else {
    console.log('保存成功')
    console.log(ret)
  }
})

结果:
新增数据
result表示新增的数据

2.查询数据

  • 查询所有

User.find(function (err, ret) {
 if (err) {
   console.log('查询失败')
 } else {
   console.log(ret)
 }
})

如下图可以看见查询出来的是一个数组

查询所有

  • 按条件查询
    在此之前我又插入一条name为李四的数据,利用上一步方法,可以查询到所有结果
    所有查询结果

使用以下代码查询名字为zs的数据


User.find({
  username: 'zs'
}, function (err, ret) {
  if (err) {
    console.log('查询失败')
  } else {
    console.log(ret)
  }
})

输出为:
按条件查询

  • 按条件查询单个
User.findOne({
  username: 'zs'
  password: '123456'
}, function (err, ret) {
  if (err) {
    console.log('查询失败')
  } else {
    console.log(ret)
  }
})

以下为输出结果,可以看书输出不是数组,而是对象

按条件查询单个

注意: 若查询条件为空,默认输出第一条数据

3. 删除数据

  • 根据条件删除所有

User.remove({
  username: 'zs'
}, function (err, ret) {
  if (err) {
    console.log('删除失败')
  } else {
    console.log('删除成功')
    console.log(ret)
  }
})

查询所有输出结果为:
根据条件删除所有

  • 根据条件删除一个

model.findOneAndRemove(conditions, [options], [callback])

  • 根据id删除一个

model.fingByIdAndRemove(id, [options], [callback])

4. 更新数据

  • 根据id更新一个

这里的id是和刚刚查询出来的保持一致

User.findByIdAndUpdate('5bd3117b5db711042015908f', {
  password: '123'
}, function (err, ret) {
  if (err) {
    console.log('更新失败')
  } else {
    console.log('更新成功')
  }
})

初始李四密码结果如下:
初始密码

得到更新后的李四密码:
更新之后

  • 根据条件更新所有

model.update(conditions, doc, [options], [callback])

  • 根据指定条件更新一个

model.findOneAndUpdate(conditions, [update], [options], [callback])

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值