mongodb的使用

180 阅读3分钟

安装

mongodb安装

启动

MongoDB的默认数据库为"db",该数据库存储在data目录中。
启动服务: mongod,
服务uri:
mongodb://127.0.0.1:27017/
mongodb://<dbuser>:<dbpassword>@<hostname>:<port>/<protjectname>
启动客户端: mongo

操作

# 执行 "db" 命令可以显示当前数据库对象或集合。
db

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

# 删除数据库:
db.dropDatabase()

# 运行"use"命令,可以连接到一个指定的数据库。
use test

# 数据库中有什么集合:
show collections

# 删除集合:
db.collection.drop()

# 展示用户
show users

# 创建用户
db.createUser(
  {
    user: ”test”,
    pwd: ”test”,
    roles: [{role:”readWrite”, db: ””}]
  }
)
db.createUser(
  {
    user: ”admin”,
    pwd: ”admin”,
    roles: [{role:”userAdminAnyDatabase”, db: ”admin”}]
  }
)

服务器上mongodb的配置

yum源上没有MongoDB仓库,如果需要安装:[yum安装MongoDB]('https://www.jianshu.com/p/c4996d5b8d9a')
启动mongodb服务: systemctl start mongod.service
关闭mongodb服务: systemctl stop mongod.service
客户端连接服务: mongo

在mongo中配置一个管理员用户:
use admin
db.createUser({user:"admin",pwd:"admin",roles:[{role:"userAdminAnyDatabase", db: "admin"}]})
db.system.users.find()

在mongo中配置一个测试用户:
use mongoTest
db.createUser({user:"test",pwd:"test",roles:[{role:"readWrite", db: "mongoTest"}]})

修改mongob的配置文件:/etc/mongod.conf
1. 可以修改storage下的dbPath,使数据存储到自己想要放到的文件夹
2. 默认情况下MongoDB只允许本机登录,可以修改配置文件的bindIp添加服务器的IP地址或注释的方式来允许远程登录

使用ODM(mongoose)来操作mongodb

首先启动mongod服务

// 导入 mongoose 模块
const mongoose = require('mongoose');

// 设置默认 mongoose 连接
const mongoDB = 'mongodb://127.0.0.1/my_database';
mongoose.connect(mongoDB);
// 让 mongoose 使用全局 Promise 库
mongoose.Promise = global.Promise;
// 取得默认连接
const db = mongoose.connection;

// 将连接与错误事件绑定(以获得连接错误的提示)
db.on('error', console.error.bind(console, 'MongoDB 连接错误:'));

/**
 * 模型和模式
 * 模式使用 Schema 接口进行定义。
 * Schema 可以定义每个文档中存储的字段,及字段的验证要求和默认值
 * 还可以通过定义静态和实例辅助方法来更轻松地处理各种类型的数据,
 * 还可以像使用普通字段一样使用数据库中并不存在的虚拟属性
 *
 * 定义模型类后,可以使用它们来创建、更新或删除记录,
 * 以及通过查询来获取所有记录或特定子集。
 * 我们将在以下“使用模型”部分展示,包括创建视图的情况
 */

// 定义模式
const Schema = mongoose.Schema;

const SomeModelSchema = new Schema({
  name: String,
  binary: Buffer,
  living: Boolean,
  updated: { type: Date, default: Date.now },
  age: { type: Number, min: 18, max: 65, required: true }, // 内置验证器(例如最大/最小值)和自定义验证函数
  mixed: Schema.Types.Mixed, // 可以是任意类型
  _someId: Schema.Types.ObjectId, // 自增id
  array: [],
  ofString: [String], // 其他类型也可使用数组
  nested: { stuff: { type: String, lowercase: true, trim: true } }, // 字段自动转换为小写或截断两端空格
  eggs: {
    type: Number,
    min: [6, '鸡蛋太少'],
    max: 12
  },
  drink: {
    type: String,
    enum: ['咖啡', '茶']
  }
})

// 使用模式“编译”模型
const SomeModel = mongoose.model('SomeModel', SomeModelSchema);