安装
- 下载
- 配置环境变量
使用
- 新建一个存放数据库的文件夹。(如: 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
- 安装依赖
npm i mongodb -S
- 连接地址 使用账号密码连接
// Connection url
const url = 'mongodb://localhost:27017';
// Database Name
const dbName = 'erp';
- 连接数据成功, 回调函数中会返回client 对象, 然后就可以对 collection 进行一系列的操作了。
MongoClient.connect(url, (err, client) => {
// Create a collection we want to drop later
const dbcol = client.db(dbName).collection('user');
})
简单事例如下:
// 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()