Mongo DB

730 阅读1分钟

安装

使用

  • 新建一个存放数据库的文件夹。(如: E盘下建文件夹 mongodb)
  • 启动 MongoDb 服务
mongod --dbpath E:\mongodb
  • 连接数据库(本地ip 地址可省略)
mongo 127.0.0.1:27017

查看数据库

show dbs

使用和创建数据库

use dbname

创建集合(表)

db.user.insert({name: 'zhangsan', age: 20})

查表

show collections

删除数据库, 删除当前所在的数据库

db.dropDatebase()

删除集合,删除指定集合

db.user.drop()

查找表中的数据

db.user.find()  // 查找所有
db.user.find({age: 20}) // 查找等于 20岁的
db.user.find({age: {$lt: 20}}) // 查找小于20岁的
db.user.find({age: {$gl: 20}}) // 大于20 岁的
db.user.find({age: {$gle: 20}}) // 大于 等于 20 岁的
db.user.find({age: {$gl: 20, $lt: 30}}) // 大于20 岁 小于 30岁的
db.user.find({name: /zhang/}) // 模糊搜索, name 中含有 zhang 字符的
db.user.find({name: /zh/}) // 模糊搜索, name 中以 zh 字符开头的
db.user.find({}, {name: 1}) // 只把name 列的数据查出来
db.user.find({}, {name: true}) // 只把name 列的数据查出来
db.user.find({age: {$gt: 20}}, {name: true}) // 只把年龄大于20 的人的名字列出来

db.user.find().sort({age: 1}) // 按年龄 1 升序, -1降序 排序
db.user.find().limit(5) // 查询前5条
db.user.find().skip(5).limit(5) //  跳过前5条, 从第6条开始查询5条

db.user.find({$or: [{age: 20}, {age: 24}]}) // 查询年龄是 20 或 24 岁的人

db.user.findOne() // 查找出第一条
db.user.find().limit(1)
db.user.find().count()  // 返回满足条条件的个数

db.user.update({name: 'zhangsan'}, {$set: {name: 'zhangsan666'}}) // 把name 是 zhangsan 的改成 zhangsan666

db.user.update({"name":"小明"},{"name":"大明","age":16}) // 不加$set 的话,整条数据将会被替换 

db.user.remove({name:'zhangsan'}) // 删除所有 name 是张三的数据
db.user.remove({name:'zhangsan'},{justOne: true}) // 只删除符合条件的 一条数据

索引

索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得更快。

db.user.ensureIndex({name: 1}) // 为 name 列添加索引, 默认情况下,设置的索引都不是唯一的
db.user.ensureIndex({userI: 1}, {unique: true}) // 插入的数据 userId 字段值不能重复
db.user.getIndexes() // 获得当前表的索引
db.user.dropIndex({name: 1}) // 删除索引
数字 1 表示 username 键的索引按升序存储,-1 表示 age 键的索引按照降序方式存储。

db.user.find().explain( "executionStats" )  // 可以查询到 执行命令的时间 explain.executionStats.executionTimeMillis

node 中如何使用 mongodb

  1. 安装依赖
npm i mongodb -S
  1. 连接地址 使用账号密码连接
// Connection url
const url = 'mongodb://localhost:27017';

// Database Name
const dbName = 'erp';
  1. 连接数据成功, 回调函数中会返回client 对象, 然后就可以对 collection 进行一系列的操作了。
MongoClient.connect(url, (err, client) => {
  // Create a collection we want to drop later
  const dbcol = client.db(dbName).collection('user');
})

官网 quick start

简单事例如下:

// Connect using MongoClient
const MongoClient = require('mongodb').MongoClient;
// Connection url
const url = 'mongodb://localhost:27017';
// Database Name
const dbName = 'erp';
const client = new MongoClient(url, { useUnifiedTopology: true });

(async function () {
  // Use connect method to connect to the server

  await client.connect()
  console.log("Connected successfully to server");
  const db = client.db(dbName);
  const collection = db.collection('user');
  await collection.insertOne({ name: 'node', age: 12 })  // 插入数据
  await collection.insertOne({ name: 'node', age: 122 })
  // await collection.deleteMany({ $or: [{ name: 'node' }, { name: 'wangwu' }] }) // 删除数据
  await collection.updateOne({ name: 'node', age: 12 }, { $set: { age: 99 } }) // 更新数据
  const items = await collection.find({}).toArray();// 查找数据
  console.log(items)
  client.close();
})()

每次增删改查都重新连接数据库,断开连接,肯定会降低性能。下面简单封装一下。

class DB {
  static getInstance() {
    if (!DB.instance) {
      DB.instance = new DB()
    }
    return DB.instance
  }
  constructor() {
    this.connect()
  }
  async connect() {
    if (!this.db) {
      const client = new MongoClient(dbUrl, { useUnifiedTopology: true });
      await client.connect()
      this.db = client.db(dbName);
    }
    return this.db
  }
  async find(collectionName, json = {}) {
    const db = await this.connect()
    const collection = db.collection(collectionName);
    return await collection.find(json).toArray()
  }
}
module.exports = DB.getInstance()