公告栏

此网站主题为本人手写主题, 主题待开源···

音乐盒

站点信息

文章总数目: 308
已运行时间: 1187
目录
  1. 安装
    1. MongoDB以及可视化工具Navicat
    2. 安装mongoose
  2. 使用
    1. 连接数据库语句
    2. 创建集合
    3. 增加文档
    4. 查询文档
    5. mongoose条件查询
    6. 更新文档
    7. 删除文档
    8. mongoose验证
    9. 整体代码
    10. 其他
    11. mongodb创建集合
尼采般地抒情

尼采般地抒情

尼采般地抒情

公告栏

此网站主题为本人手写主题, 主题待开源···

站点信息

文章总数目: 308
已运行时间: 1187

shardb-mongodb模块操作数据库不好去使用,比如查询,新建等,所以这个模块只用作ot服务那边;

另外使用mongoose去操作数据库方便写接口

schema的相关配置为connection

安装

MongoDB以及可视化工具Navicat

参考之前写的文章:MongoDB下载及使用+Navicat使用+服务器上的配置

安装mongoose

cnpm install mongoose -S

使用

连接数据库语句

// 连接数据库
mongoose
  .connect('mongodb://127.0.0.1:27017/test-mongoose', {
    useNewUrlParser: true,
    useUnifiedTopology: true,
  })
  .then(() => {
    console.log('数据库连接成功')
  })
  .catch(() => {
    console.log('数据库连接失败')
  })

然后再将这个js文件require到app.js里面使用

// 数据库连接
require('./model/connect')

创建集合

  • 先利用函数mongoose的schema函数构建一个规则
  • 然后利用model函数创建一个集合并且用上这个规则
// Schema:数据库集合的结构对象。
// 创建一个集合(相当于sql里面的设定一个表)规则
let TestSchema = new mongoose.Schema({
  name: { type: String },
  age: { type: Number, default: 0 },
  email: { type: String },
  time: { type: Date, default: Date.now },
})

// Model :由Schema构造而成,可操作数据库。
// 创建一个集合(并且应用上面的规则)
let TestModel = mongoose.model('schema', TestSchema)

增加文档

  • 第一个参数:create函数
  • 第二个参数:可以打印相关信息(doc和err)
// 创建(创建完执行以便之后就注释掉,不然会一直重复创建)
TestModel.create(
  [
    { name: 'test-1', age: 8 },
    { name: 'test-2', age: 18 },
    { name: 'test-3', age: 28 },
    { name: 'test-4', age: 38 },
    { name: 'test-5', age: 48 },
    { name: 'test-6', age: 58, email: 'tttt@qq.com' },
    { name: 'test-7', age: 68, email: 'ssss@qq.com' },
    { name: 'test-8', age: 18 },
    { name: 'test-9', age: 18, email: 'rrrr@qq.com' },
    { name: 'test-10', age: 18 },
  ],
  (error, docs){
    if (error) {
      console.log(error)
    } else {
      console.log('save ok')
      console.log(docs)
    }
  }
)
  • 也可以创建一个对象赋值给一个变量,然后该变量利用函数save即可保存到数据库

创建完执行以便之后就注释掉,不然会一直重复创建

查询文档

  • 查询函数findOne:返回第一条数据
  • 查询函数find:查询所有包含条件的数据
// 查询
TestModel.find(
  // 28<= age <48
  { age: { $gte: 28, $lt: 48 } },
  // 1为指定字段,0为排除字段
  { name: 1, age: 1, _id: 0 },
  function (err, docs) {
    if (err) {
      console.log('查询出错: ' + err)
    } else {
      console.log('$gte,$lte查询结果为: ')
      console.log(docs)
    }
  }
)

mongoose条件查询

键为变量时用

中括号括起来就行了

checkStr(data.type_id, 'email')
    ? (type_str = 'email')
    : (type_str = 'user_id')
Model_user.find({ [type_str]: data.type_id }, {}, (err, docs) => {}

逻辑查询

参考:

Model_user.find(
  { $or: [{ email: obj.email }, { user_id: obj.user_id }] },
  {},
  (err, docs) => {}
)

更新文档

User.updateOne({查询条件}, {要修改的值}).then(result => console.log(result))

  • updateOne:更新单个
  • updateMany:更新多个
// 更新
let conditions_1 = { name: 'test-3' }
let update = { $set: { age: 11 } }
TestModel.updateOne(conditions_1, update, function (error) {
  if (error) {
    console.log(error)
  } else {
    console.log('Update success!')
    TestModel.find(
      { name: 'test-3' },
      { name: 1, age: 1, _id: 0 },
      function (err, docs) {
        if (err) {
          console.log('查询出错: ' + err)
        } else {
          console.log('更新test-3后的查询结果为: ')
          console.log(docs)
        }
      }
    )
  }
})

删除文档

  • 删除单个:User.findOneAndDelete({})then(result => console.log(result))
  • 删除多个:User.deleteMany({}).then(result => console.log(result))
  • deleteOne:删除单个
// 删除
let conditions_2 = { name: 'test-2' }
TestModel.deleteOne(conditions_2, function (error) {
  if (error) {
    console.log(error)
  } else {
    console.log('Delete success!')
    TestModel.find(
      { name: 'test-2' },
      { name: 1, age: 1, _id: 0 },
      function (err, docs) {
        if (err) {
          console.log('查询出错: ' + err)
        } else {
          console.log('删除test-2后的查询结果为: ')
          console.log(docs)
        }
      }
    )
  }
})

mongoose验证


required: true 必传字段

minlength:3 字符串最小长度

maxlength: 20 字符串最大长度

min: 2 数值最小为2

max: 100 数值最大为100

enum: ['html', 'css', 'javascript', 'node.js']

trim: true 去除字符串两边的空格

validate: 自定义验证器

default: 默认值


获取错误信息:error.errors['字段名称'].message

整体代码

/*
 * @Author: wztlink1013
 * @Date: 2022-01-11 12:43:02
 * @LastEditTime: 2022-01-11 16:44:13
 * @Description:
 */
const mongoose = require('mongoose')

// 连接数据库
mongoose
  .connect('mongodb://127.0.0.1:27017/test-mongoose', {
    useNewUrlParser: true,
    useUnifiedTopology: true,
  })
  .then(() => {
    console.log('数据库连接成功')
  })
  .catch(() => {
    console.log('数据库连接失败')
  })

// Schema:数据库集合的结构对象。
let TestSchema = new mongoose.Schema({
  name: { type: String },
  age: { type: Number, default: 0 },
  email: { type: String },
  time: { type: Date, default: Date.now },
})

// Model :由Schema构造而成,可操作数据库。
let TestModel = mongoose.model('schema', TestSchema)

// Entity:由Model创建的实体,可操作数据库。
// let TestEntity = new TestModel({
//   name: 'helloworld',
//   age: 28,
//   email: 'helloworld@qq.com',
// })
// console.log(TestEntity)

// 创建(创建完执行以便之后就注释掉,不然会一直重复创建)
// TestModel.create(
//   [
//     { name: 'test-1', age: 8 },
//     { name: 'test-2', age: 18 },
//     { name: 'test-3', age: 28 },
//     { name: 'test-4', age: 38 },
//     { name: 'test-5', age: 48 },
//     { name: 'test-6', age: 58, email: 'tttt@qq.com' },
//     { name: 'test-7', age: 68, email: 'ssss@qq.com' },
//     { name: 'test-8', age: 18 },
//     { name: 'test-9', age: 18, email: 'rrrr@qq.com' },
//     { name: 'test-10', age: 18 },
//   ],
//   function (error, docs) {
//     if (error) {
//       console.log(error)
//     } else {
//       // console.log('save ok')
//       // console.log(docs)
//     }
//   }
// )

// 查询
TestModel.find(
  // 28<= age <48
  { age: { $gte: 28, $lt: 48 } },
  // 1为指定字段,0为排除字段
  { name: 1, age: 1, _id: 0 },
  function (err, docs) {
    if (err) {
      console.log('查询出错: ' + err)
    } else {
      console.log('$gte,$lte查询结果为: ')
      console.log(docs)
    }
  }
)
// 更新
let conditions_1 = { name: 'test-3' }
let update = { $set: { age: 11 } }
TestModel.updateOne(conditions_1, update, function (error) {
  if (error) {
    console.log(error)
  } else {
    console.log('Update success!')
    TestModel.find(
      { name: 'test-3' },
      { name: 1, age: 1, _id: 0 },
      function (err, docs) {
        if (err) {
          console.log('查询出错: ' + err)
        } else {
          console.log('更新test-3后的查询结果为: ')
          console.log(docs)
        }
      }
    )
  }
})
// 删除
let conditions_2 = { name: 'test-2' }
TestModel.deleteOne(conditions_2, function (error) {
  if (error) {
    console.log(error)
  } else {
    console.log('Delete success!')
    TestModel.find(
      { name: 'test-2' },
      { name: 1, age: 1, _id: 0 },
      function (err, docs) {
        if (err) {
          console.log('查询出错: ' + err)
        } else {
          console.log('删除test-2后的查询结果为: ')
          console.log(docs)
        }
      }
    )
  }
})




其他

mongodb创建集合


评论区

Twikoo giscus