MongoDB知识点

MongoDB

简介

MongoDB 是为快速开发互联网Web应用而设计的数据库系统,官方地址 https://www.mongodb.com/

数据库(DataBase)是按照数据结构来组织、存储和管理数据的仓库。是一个应用程序

下载安装

下载地址 https://www.mongodb.com/download-center/community

安装过程截图

安装完毕后进行几步操作

一、为了方便在命令行下运行,可以配置 mongodb 命令的环境变量 PATH

此电脑 -> 属性 -> 高级系统设置 -> 环境变量 -> 双击 Path -> 新建 -> 设置 mongod.exe 所在文件夹路径

C:\Program Files\MongoDB\Server\3.2\bin

二、创建默认的仓库文件夹

c:\data\db

三、打开命令行窗口输入mongod 启动数据库服务器

使用

三个重要概念

  • 数据库(database) 数据库是一个仓库,在仓库中可以存放集合
  • 集合(collection) 集合类似于JS中的数组,在集合中可以存放文档
  • 文档(document) 文档数据库中的最小单位,类似于 JS 中的对象,在 MongoDB 中每一条数据都是一个 JS 的对象

常用命令

数据库集合命令
  1. 显示所有的数据库
show dbs
show databases
  1. (创建)切换到指定的数据库
use 数据库名
  1. 显示当前所在的数据库
db
  1. 删除当前数据库
db.dropDatabase()
  1. 显示当前数据库中的所有集合
show collections
  1. 删除当前集合
db.collection.drop()
  1. 重命名集合
db.collection.renameCollection('newName')

操作集合时,如果集合不存在则会自动创建集合

文档命令

1)插入文档

db.collection.insert(文档对象);
  1. 查询文档
db.collection.find(查询条件)	
db.collection.findOne(查询条件)
  1. 更新文档
db.collection.update(查询条件,新的文档,配置对象)   
// 更新一个
db.collection.updateOne(查询条件,要更新的内容[,配置对象]) 
// 批量更新
db.collection.updateMany(查询条件,要更新的内容[,配置对象])
//eg
db.students.update({name:'xiaohigh'},{$set:{age:19}})
  1. 删除集合中的文档
db.collection.remove(查询条件)
条件控制
运算符

在 mongodb 不能 > < >= <= !== 等运算符,需要使用替代符号

  • > 使用 $gt
  • < 使用 $lt
  • >= 使用 $gte
  • <= 使用 $lte
  • !== 使用 $ne
逻辑或

$in 满足其中一个即可

db.students.find({age:{$in:[18,24]}})

$or 逻辑或的情况

db.students.find({$or:[{age:18},{age:24}]})
正则匹配

条件中可以直接使用 JS 的正则语法

db.students.find({name:/imissyou/});
$where

如果遇到更为复杂的情况,可以使用 $where 进行函数筛选

db.students.find({$where:function(){
	return this.name === 'xiaohigh' && this.age === 18
}});

Mongoose

介绍

Mongoose 是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进行了进一步的优化封装,并提供了更多的功能。 官网 http://www.mongoosejs.net/

作用

使用代码操作 mongodb 数据库

使用流程

一、安装 mongoose

在命令行下使用 npm 或者其他包管理工具安装(cnpm yarn)

npm install mongoose --save

二、引入包

在运行文件中引入 mongoose

var mongoose = require('mongoose');

三、连接数据库

mongoose.connect('mongodb://127.0.0.1/data');

//如果启动时遇到警告提醒, 则按照提示增加选项即可
mongoose.connect('mongodb://127.0.0.1/data', {useNewUrlParser: true, useUnifiedTopology: true});

四、监听连接事件

mongoose.connection.on('open', function () {
	if (err) throw err;
	
	//下面编写数据库操作代码
    
    //五、创建文档结构
    var SongSchema = new mongoose.Schema({
        title: String,  //歌名
        author: String  //歌手
    });
    
    //六、创建文档模型
    var SongModel = mongoose.model('songs', SongSchema);
    
    //七、使用模型进行文档处理(这里以增加数据为例)
    SongModel.create({title:'野狼disco',author:'宝石gem'}, function(err,data){
        if(err) throw err; //这里判断错误
        
        //下面编写创建成功后的逻辑
        // ... ...
        
        //八、关闭数据库连接(可选,代码上线之后一般不加)
        mongoose.connection.close();
    });
	
});

数据类型

文档结构可选的字段类型列表

  • String
  • Number
  • Date
  • Buffer
  • Boolean
  • Mixed 任意类型
  • ObjectId
  • Array
  • Decimal128 存钱的时候会用

设置文档结构的时候,可以进行对象形式的赋值,常见的几种情况

一、设置必填

var UserSchema = new Schema({
    name: {
        type: String, 
        required: true
    }
});

二、设置默认值

var UserSchema = new Schema({
    gender: {
        type: String,
        default: 'female'
    }
});

三、设置任意类型

var UserSchema = new Schema({
    intro: Schema.Types.Mixed
});

四、设置数组

var UserSchema = new Schema({
    hobby:['敲代码','玩游戏']
});

CURD

数据库的基本操作包括四个,增加(create),删除(delete),修改(update),查(read)

增加

插入一条

SongModel.create({
    title:'给我一首歌的时间',
    author: 'Jay'
}, function(err, data){
    //错误
    console.log(err);
    //插入后的数据对象
    console.log(data);
});

批量插入

SongModel.insertMany([
    {
        title:'给我一首歌的时间',
        author: 'Jay'
    },
    {
        title:'爱笑的眼睛',
        author: 'JJ Lin',
    },
    {
        title:'缘分一道桥',
        author: 'Leehom Wang'
    }
], function(err, data){
    console.log(err);
    console.log(data);
});
删除

删除一条数据

SongModel.deleteOne({_id:'5dd65f32be6401035cb5b1ed'}, function(err, data){
    console.log(err);
    console.log(data);
});

批量删除

SongModel.deleteMany({author:'Jay'}, function(err, data){
    console.log(err);
    console.log(data);
});
更新

更新一条数据

SongModel.updateOne({author: 'JJ Lin'}, {author: '林俊杰'}, function (err, data) {
    console.log(err);
    console.log(data);
});

批量更新数据

SongModel.updateMany({author: 'Leehom Wang'}, {author: '王力宏'}, function (err, data) {
    console.log(err);
    console.log(data);
});
查询

查询一条数据

SongModel.findOne({author: '王力宏'}, function(err, data){
    console.log(err);
    console.log(data);
});
//根据 id 查询数据
SongModel.findById('5dd662b5381fc316b44ce167',function(err, data){
    console.log(err);
    console.log(data);
});

批量查询数据

//不加条件查询
SongModel.find(function(err, data){
    console.log(err);
    console.log(data);
});
//加条件查询
SongModel.find({author: '王力宏'}, function(err, data){
    console.log(err);
    console.log(data);
});
字段筛选
SongModel.find().select({_id:0,title:1}).exec(function(err,data){
    console.log(data);
});
数据排序
SongModel.find().sort({hot:1}).exec(function(err,data){
    console.log(data);
});
数据截取
SongModel.find().skip(10).limit(10).exec(function(err,data){
    console.log(data);
});

组件化

将数据库模型,单独分离开,方便代码管理

附录

mongodb 配置密码

一、启动 mongod 带验证选项

# mongod --auth

二、创建用户

> use admin
> db.createUser({user:"admin",pwd:"password",roles:["root"]})

三、连接 mongod 服务

> mongo
> use admin
> db.auth("admin", "password")

四、mongoose 连接操作

mongoose.connect('mongodb://admin:password@localhost/prepare?authSource=admin');

关系型数据库(RDBS)

代表有:MySQL、Oracle、DB2、SQL Server…

特点:关系紧密,都是表

优点:

1、易于维护:都是使用表结构,格式一致;

2、使用方便:1通用,可用于复杂查询;

3、高级查询:可用于一个表以及多个表之间非常复杂的查询。

缺点:

1、读写性能比较差,尤其是海量数据的高效率读写;

2、有固定的表结构,字段不可随意更改,灵活度稍欠;

3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。

非关系型数据库(NoSQL not only SQL )

代表有:MongoDB、Redis…

特点:关系不紧密,有文档,有键值对

优点:

1、格式灵活:存储数据的格式可以是key,value形式。

2、速度快:nosql可以内存作为载体,而关系型数据库只能使用硬盘;

3、易用:nosql数据库部署简单。

缺点:

1、不支持sql,学习和使用成本较高;

2、不支持事务;

3、复杂查询时语句过于繁琐。

/**


 image.baidu.com/channel/listjson?pn=0&rn=30&tag1=美女&tag2=全部

 http://tingapi.ting.baidu.com/v1/restserver/ting&method=baidu.ting.billboard.billList&type=1&size=10&offset=0
 */
var request = require('request');
var mongoose = require('mongoose');
//
// //连接服务器
mongoose.connect('mongodb://127.0.0.1/data', {useNewUrlParser: true, useUnifiedTopology: true});
//
// //监听连接事件
mongoose.connection.on('open', function (err, data) {
    if (err) throw err;

    //1. 创建结构
    var SongSchema = new mongoose.Schema({
        language: String,
        image: String,
        duration: Number,
        hot: Number,
        title: String,
        author: String,
    });

    //2. 创建模型
    var SongModel = mongoose.model('songs', SongSchema);

    //3. 增加数据 百度音乐
    request('http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type=1&size=100&offset=0', (err, response, body) => {
        if (err) throw err;

        var body = JSON.parse(body);
        var songs = body.song_list;

        var data = [];
        for (var i = 0; i < songs.length; i++) {
            var d = {};
            d.language = songs[i].language;
            d.image = songs[i].pic_big;
            d.hot = songs[i].hot;
            d.title = songs[i].title;
            d.author = songs[i].author;
            d.duration = songs[i].file_duration;

            data.push(d);
        }

        SongModel.insertMany(data, function(err, data){
            if(err) throw err;
            console.log('数据插入成功');
            mongoose.connection.close();
        })
    });


});


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值