0%

3.CentOS+Nginx+Mongodb+node之Mongodb篇

本文是构建CentOS+Nginx+Mongodb+Node之Mongodb篇知识的整理。

0.参考

  • 1.茅坑里的小石头-简书:https://www.jianshu.com/p/

    1.MongoDB简介

  • MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统,在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
  • MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

2.MongoDB的基本应用

一个mongodb中可以建立多个数据库。MongoDB的默认数据库为”db”,该数据库存储在data目录中。MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

2.1mongo命令

  • 1.show dbs 显示所有数据库。
  • 2.db 显示当前数据库或集合。
  • 3.use dataName(数据库名称应当小写) 连接到指定数据库,不存在则创建。
  • 4.db.dropDatabase() 删除当前数据库
  • 5.db.collection.drop() 删除当前集合
  • 6.insert() 或 save() 方法向集合中插入文档,语法如下:
    • db.COLLECTION_NAME(变量).insert(document)
    • db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。
  • 7.MongoDB 使用 update() 和 save() 方法来更新集合中的文档
    • update() 方法用于更新已存在的文档。语法格式如下:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      db.collection.update(    
      <query>,
      <update>,
      {
      upsert: <boolean>,
      multi: <boolean>,
      writeConcern: <document>
      }
      )
      参数说明:

      query : update的查询条件,类似sql update查询内where后面的。
      update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
      upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
      multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
      writeConcern :可选,抛出异常的级别。
    • save() 方法通过传入的文档来替换已有文档
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      db.collection.save(    
      <document>,
      {
      writeConcern: <document>
      }
      )
      参数说明:

      document : 文档数据。
      writeConcern :可选,抛出异常的级别
  • remove() 方法的基本语法格式如下所示:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    db.collection.remove( 
    <query>,
    <justOne>
    )
    如果你的 MongoDB 是 2.6 版本以后的,语法格式如下:

    db.collection.remove(
    <query>,
    {
    justOne: <boolean>,
    writeConcern: <document>
    }
    )
    参数说明:

    query :(可选)删除的文档的条件。
    justOne : (可选)如果设为 true 或 1,则只删除一个文档。
    writeConcern :(可选)抛出异常的级别。
  • MongoDB 查询数据的语法格式如下:
    1
    2
    3
    4
    5
    6
    >db.COLLECTION_NAME.find()
    find() 方法以非结构化的方式来显示所有文档。

    如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

    >db.col.find().pretty()

    2.2mongodb默认设置

  • 1.有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。
    • 1.admin: 从权限的角度来看,这是”root”数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
    • 2.local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
    • 3.config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

      2.3连接到mongodb

  • 1.shell连接
    • 1.mongodb://localhost
    • 2.mongodb://username:password@hostname/dbname

3.安装

  • 1.配置mongodb-org
  • 2.yum install -y mongodb-org
  • 3.systemctl start mongod
    • 检查log验证:tail /var/log/mongodb/mongod.log
  • 4.systemctl enable mongod
  • 5.坑:
    • mongodb目前遇到不正常关闭较多
      • 建议在重启服务器之前先systemctl stop mongod,重启后手动开启服务。
    • Failed to unlink socket file /tmp/mongodb-27017.sock errno:1 Operation not permitted
      • 删除/tmp/mongodb-27017.sock。
    • ERROR: child process failed, exited with error number 14
      • 到dbpath里边的mongod.lock文件,并删除mongod.lock,删掉原来log目录里的所有文件就可以
    • Failed global initialization: FileNotOpen: Failed to open “/var/log/mongodb/
      • 权限问题
      • chown -R mongod:mongod /var/lib/mongo
    • https://www.jianshu.com/p/36150c09838b ;systemctl 指令

4.mongoose的使用

  • db.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/users',{useUnifiedTopology: true,useNewUrlParser: true});
const db= mongoose.connection;
mongoose.Promise=global.Promise;
db.on('open',()=>{console.log('连接成功')});
db.on('error',()=>{console.log('连接失败')});
module.exports={mongoose};
//

const mongoose = require("./index");
const Schema = mongoose.Schema;

var UserSchema = new Schema({
name: {type: String},
mobile: {type: String},
pwd: {type: String}
});
module.exports = mongoose.model('User', UserSchema);
);