MongoDB 使用

MongoDB

noSQL ======= not only SQL

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

它的特点:高性能、易部署、易使用,存储数据非常方便。

使用前操作:

下载>安装>设置环境变量

启动:

$mongod --dbpath <path> --logpath <path> --logappend --port 27017

$mongod --dbpath <path>

$mongod --dbpath <path> --fork

连接:

$mongo

查看所有数据库:

show dbs

查看当前连接的数据库:

db

切换数据库:

use yourdb

查看数据库的所有集合:

show collections

执行:

方式1:

mongo 命令行操作

方式2:

load(‘path’);

MongoDB 概念解析
SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键
数据库

一个mongodb中可以建立多个数据库。

MongoDB的默认数据库为"db",该数据库存储在data目录中。

MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

集合

集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。

集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

文档

文档是一个键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。

数据类型
常用命令
  1. Help查看命令提示

    help

    db.help()

    db.test.help()

    db.test.find().help()

  2. 创建/切换数据库

    use <数据库名>

  3. 查询数据库

    show dbs

  4. 查看当前使用的数据库

    db/db.getName()

  5. 显示当前DB状态

    db.stats()

  6. 查看当前DB版本

  7. db.version()

  8. 查看当前DB的链接机器地址

    db.getMongo()

  9. 删除数据库

    db.dropDatabase()

Collection集合操作
  1. 创建一个集合

    db.createCollection("collName", {size: 20, capped: true, max: 100});
    db.collName.isCapped(); //判断集合是否为定容量
    
  2. 得到指定名称的集合

    db.getCollection("account"); //  db.account
    
  3. 得到当前db的所有集合

    db.getCollectionNames();   //show collections
    
  4. 显示当前db所有集合的状态

    db.printCollectionStats();
    
Document文档操作
  1. 添加

    db.users.save({name: ‘zhangsan', age: 25, sex: true});
    
  2. 修改

    db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true);
    db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);
    db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);
    
  3. 删除

    db.users.remove({age: 132});
    
  4. 查询所有记录

    db.userInfo.find();
    
  5. 查询去重后数据

    db.userInfo.distinct("name");
    
  6. 查询age = 22的记录

    db.userInfo.find({"age": 22});
    
  7. 查询age > 22的记录

    db.userInfo.find({age: {$gt: 22}});
    
  8. age < 22的记录

    db.userInfo.find({age: {$lt: 22}});
    
  9. 查询age >= 25的记录

    db.userInfo.find({age: {$gte: 25}});
    
  10. 查询age <= 25的记录

db.userInfo.find({age: {$lte: 25}});
  1. 查询age >= 23 并且 age <= 26

    db.userInfo.find({age: {$gte: 23, $lte: 26}});
    
  2. 查询name中包含 mongo的数据

    db.userInfo.find({name: /mongo/});
    
  3. 查询name中以mongo开头的

    db.userInfo.find({name: /^mongo/});
    
  4. 查询指定列name、age数据

    db.userInfo.find({}, {name: 1, age: 1});
    
  5. 查询指定列name、age数据, age > 25

    db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
    
  6. 按照年龄排序

    升序:db.userInfo.find().sort({age: 1});
    降序:db.userInfo.find().sort({age: -1});
    
  7. 查询name = zhangsan, age = 22的数据

    db.userInfo.find({name: 'zhangsan', age: 22});
    
  8. 查询前5条数据

    db.userInfo.find().limit(5);
    
  9. 查询10条以后的数据

    db.userInfo.find().skip(10);
    
  10. 查询在5-10之间的数据

    db.userInfo.find().skip(5).limit(10);
    
    
    page=1&count=10        skip=(page-1)*count       limit=count
    0~9
    page=2&count=10         skip=(page-1)*count      limit=count
    10~19
    
    
    
    offset=0&limit=10          skip=offset            limit=limit
    0~9
    offset=10&limit=20          skip=offset            limit=limit
    10~29
    offset=30&limit=8
    
  11. or查询

    db.userInfo.find({$or: [{age: 22}, {age: 25}]});
    
  12. 查询第一条数据

    db.userInfo.findOne();
    
  13. 查询某个结果集的记录条数

    db.userInfo.find({age: {$gte: 25}}).count();
    

使用mongoose在Node.js操作MongoDB

安装
npm install mongoose -S
// 定义表格字段
const userSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  age: {
    type: Number,
    min: 0,
    max: 100
  },
  gender: {
    type: String,
    default: '男'
  }
  ...
});

// 把表格转为一个js可以操作的类
// 参数1:collection的名字
// 参数2:collection的字段声明
const User = mongoose.model('user', userSchema);


// 连接数据库
mongoose.connect('mongodb://localhost:27017/project', {useNewUrlParser: true}, async (error)=>{
  if(error) throw error;
  console.log('连接成功');
  }
增删改查   数据库操作三种写法(数据库操作为异步操作,不能直接写在外面)
  // 新增
  const zhangsan = new User({
    name: '张三',
    age: 40
  });
  
  //保存
  
  1、回调函数
   zhangsan.save((error, result)=>{
    console.log(error);
    console.log(result);
  });
  
  
  2.promise
   zhangsan.save()
  .then(result=>{
    console.log(result);
  })
  .catch(error=>{
    console.log(error);
  })
  
  
  3.try{}catch{}
   try{
    const result = await zhangsan.save();
  }
  catch(error){
    console.log(error);
  }

```js

    // 新增
    // new User().save();


    /* // 删除
    User.findByIdAndRemove()
    User.findByIdAndDelete()
    User.findOneAndDelete()
    User.findOneAndRemove()
    User.deleteMany()
    User.deleteOne()
     */


    /* // 更新
    User.findByIdAndUpdate()
    User.findOneAndUpdate()
    User.update()    //最新的不能用
    User.updateMany()
    User.updateOne()
     */


    /* 
    // 查找
    User.find()
    User.where().find()
    User.find().skip()
    User.find().limit()
    User.findById()
    User.findOne()
     */


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值