尼采般地抒情

尼采般地抒情

尼采般地抒情

音乐盒

站点信息

文章总数目: 321
已运行时间: 1782

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创建集合


评论区

什么都不舍弃,什么也改变不了