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

schema的相关配置为connection

  • 之前的增删改查笔记:https://github.com/wztlink1013/web-learn-notes/blob/gh-pages/learn-nodejs/express/model/connect.js
  • mongoose踩坑笔记: Cannot overwrite `` model once compiled.

    安装

    MongoDB以及可视化工具Navicat

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

    安装mongoose

    1. cnpm install mongoose -S

    使用

    连接数据库语句

    1. // 连接数据库
    2. mongoose
    3. .connect('mongodb://127.0.0.1:27017/test-mongoose', {
    4. useNewUrlParser: true,
    5. useUnifiedTopology: true,
    6. })
    7. .then(() => {
    8. console.log('数据库连接成功')
    9. })
    10. .catch(() => {
    11. console.log('数据库连接失败')
    12. })

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

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

    创建集合

  • 先利用函数mongoose的schema函数构建一个规则

  • 然后利用model函数创建一个集合并且用上这个规则 ```javascript // 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)

  1. <a name="lC5j4"></a>
  2. ### 增加文档
  3. - 第一个参数:create函数
  4. - 第二个参数:可以打印相关信息(doc和err)
  5. ```javascript
  6. // 创建(创建完执行以便之后就注释掉,不然会一直重复创建)
  7. TestModel.create(
  8. [
  9. { name: 'test-1', age: 8 },
  10. { name: 'test-2', age: 18 },
  11. { name: 'test-3', age: 28 },
  12. { name: 'test-4', age: 38 },
  13. { name: 'test-5', age: 48 },
  14. { name: 'test-6', age: 58, email: 'tttt@qq.com' },
  15. { name: 'test-7', age: 68, email: 'ssss@qq.com' },
  16. { name: 'test-8', age: 18 },
  17. { name: 'test-9', age: 18, email: 'rrrr@qq.com' },
  18. { name: 'test-10', age: 18 },
  19. ],
  20. (error, docs){
  21. if (error) {
  22. console.log(error)
  23. } else {
  24. console.log('save ok')
  25. console.log(docs)
  26. }
  27. }
  28. )
  • 也可以创建一个对象赋值给一个变量,然后该变量利用函数save即可保存到数据库 :::danger 创建完执行以便之后就注释掉,不然会一直重复创建 :::

    查询文档

  • 查询函数findOne:返回第一条数据

  • 查询函数find:查询所有包含条件的数据
    1. // 查询
    2. TestModel.find(
    3. // 28<= age <48
    4. { age: { $gte: 28, $lt: 48 } },
    5. // 1为指定字段,0为排除字段
    6. { name: 1, age: 1, _id: 0 },
    7. function (err, docs) {
    8. if (err) {
    9. console.log('查询出错: ' + err)
    10. } else {
    11. console.log('$gte,$lte查询结果为: ')
    12. console.log(docs)
    13. }
    14. }
    15. )

    mongoose条件查询

    键为变量时用
    中括号括起来就行了
    1. checkStr(data.type_id, 'email')
    2. ? (type_str = 'email')
    3. : (type_str = 'user_id')
    4. Model_user.find({ [type_str]: data.type_id }, {}, (err, docs) => {}

逻辑查询
参考:

  • 文档:http://mongoosejs.net/docs/queries.html
  • mongoose 系列之一 find 查询

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

    更新文档

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

  • updateOne:更新单个

  • updateMany:更新多个

    1. // 更新
    2. let conditions_1 = { name: 'test-3' }
    3. let update = { $set: { age: 11 } }
    4. TestModel.updateOne(conditions_1, update, function (error) {
    5. if (error) {
    6. console.log(error)
    7. } else {
    8. console.log('Update success!')
    9. TestModel.find(
    10. { name: 'test-3' },
    11. { name: 1, age: 1, _id: 0 },
    12. function (err, docs) {
    13. if (err) {
    14. console.log('查询出错: ' + err)
    15. } else {
    16. console.log('更新test-3后的查询结果为: ')
    17. console.log(docs)
    18. }
    19. }
    20. )
    21. }
    22. })

    删除文档

  • 删除单个:User.findOneAndDelete({})then(result => console.log(result))

  • 删除多个:User.deleteMany({}).then(result => console.log(result))
  • deleteOne:删除单个 ```javascript // 删除 let conditions_2 = { name: ‘test-2’ } TestModel.deleteOne(conditions_2, function (error) { if (error) { console.log(error) } else { console.log(‘Delete success!’) TestModel.find(
    1. { name: 'test-2' },
    2. { name: 1, age: 1, _id: 0 },
    3. function (err, docs) {
    4. if (err) {
    5. console.log('查询出错: ' + err)
    6. } else {
    7. console.log('删除test-2后的查询结果为: ')
    8. console.log(docs)
    9. }
    10. }
    ) } })
  1. <a name="NvcCP"></a>
  2. ### mongoose验证
  3. required: true 必传字段<br />minlength:3 字符串最小长度<br />maxlength: 20 字符串最大长度<br />min: 2 数值最小为2<br />max: 100 数值最大为100<br />enum: ['html', 'css', 'javascript', 'node.js']<br />trim: true 去除字符串两边的空格<br />validate: 自定义验证器<br />default: 默认值
  4. 获取错误信息:error.errors['字段名称'].message
  5. <a name="Fa0Tc"></a>
  6. ### 整体代码
  7. ```javascript
  8. /*
  9. * @Author: wztlink1013
  10. * @Date: 2022-01-11 12:43:02
  11. * @LastEditTime: 2022-01-11 16:44:13
  12. * @Description:
  13. */
  14. const mongoose = require('mongoose')
  15. // 连接数据库
  16. mongoose
  17. .connect('mongodb://127.0.0.1:27017/test-mongoose', {
  18. useNewUrlParser: true,
  19. useUnifiedTopology: true,
  20. })
  21. .then(() => {
  22. console.log('数据库连接成功')
  23. })
  24. .catch(() => {
  25. console.log('数据库连接失败')
  26. })
  27. // Schema:数据库集合的结构对象。
  28. let TestSchema = new mongoose.Schema({
  29. name: { type: String },
  30. age: { type: Number, default: 0 },
  31. email: { type: String },
  32. time: { type: Date, default: Date.now },
  33. })
  34. // Model :由Schema构造而成,可操作数据库。
  35. let TestModel = mongoose.model('schema', TestSchema)
  36. // Entity:由Model创建的实体,可操作数据库。
  37. // let TestEntity = new TestModel({
  38. // name: 'helloworld',
  39. // age: 28,
  40. // email: 'helloworld@qq.com',
  41. // })
  42. // console.log(TestEntity)
  43. // 创建(创建完执行以便之后就注释掉,不然会一直重复创建)
  44. // TestModel.create(
  45. // [
  46. // { name: 'test-1', age: 8 },
  47. // { name: 'test-2', age: 18 },
  48. // { name: 'test-3', age: 28 },
  49. // { name: 'test-4', age: 38 },
  50. // { name: 'test-5', age: 48 },
  51. // { name: 'test-6', age: 58, email: 'tttt@qq.com' },
  52. // { name: 'test-7', age: 68, email: 'ssss@qq.com' },
  53. // { name: 'test-8', age: 18 },
  54. // { name: 'test-9', age: 18, email: 'rrrr@qq.com' },
  55. // { name: 'test-10', age: 18 },
  56. // ],
  57. // function (error, docs) {
  58. // if (error) {
  59. // console.log(error)
  60. // } else {
  61. // // console.log('save ok')
  62. // // console.log(docs)
  63. // }
  64. // }
  65. // )
  66. // 查询
  67. TestModel.find(
  68. // 28<= age <48
  69. { age: { $gte: 28, $lt: 48 } },
  70. // 1为指定字段,0为排除字段
  71. { name: 1, age: 1, _id: 0 },
  72. function (err, docs) {
  73. if (err) {
  74. console.log('查询出错: ' + err)
  75. } else {
  76. console.log('$gte,$lte查询结果为: ')
  77. console.log(docs)
  78. }
  79. }
  80. )
  81. // 更新
  82. let conditions_1 = { name: 'test-3' }
  83. let update = { $set: { age: 11 } }
  84. TestModel.updateOne(conditions_1, update, function (error) {
  85. if (error) {
  86. console.log(error)
  87. } else {
  88. console.log('Update success!')
  89. TestModel.find(
  90. { name: 'test-3' },
  91. { name: 1, age: 1, _id: 0 },
  92. function (err, docs) {
  93. if (err) {
  94. console.log('查询出错: ' + err)
  95. } else {
  96. console.log('更新test-3后的查询结果为: ')
  97. console.log(docs)
  98. }
  99. }
  100. )
  101. }
  102. })
  103. // 删除
  104. let conditions_2 = { name: 'test-2' }
  105. TestModel.deleteOne(conditions_2, function (error) {
  106. if (error) {
  107. console.log(error)
  108. } else {
  109. console.log('Delete success!')
  110. TestModel.find(
  111. { name: 'test-2' },
  112. { name: 1, age: 1, _id: 0 },
  113. function (err, docs) {
  114. if (err) {
  115. console.log('查询出错: ' + err)
  116. } else {
  117. console.log('删除test-2后的查询结果为: ')
  118. console.log(docs)
  119. }
  120. }
  121. )
  122. }
  123. })

image.png

其他