文章目录

  • 一、NoSQL 简介
  • 1.1 NoSQL的优点
  • 1.2 NoSQL的缺点
  • 1.3 NoSQL的分类
  • 二、MongoDB
  • 2.0 demo示例
  • 2.1 install and connect mongoose
  • 2.2 基本指令


一、NoSQL 简介

NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",是非关系型的数据库。

NoSQL用于超大规模数据的存储。
(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)

这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

1.1 NoSQL的优点

  • 高可扩展性
  • 分布式计算
  • 低成本
  • 架构的灵活性,半结构化数据
  • 没有复杂的关系

1.2 NoSQL的缺点

  • 没有标准化
  • 有限的查询功能(到目前为止)
  • 最终一致是不直观的程序

1.3 NoSQL的分类

Nosql精粹这本书怎么样 nosql数据库入门与实践_数据库


接下来重点讲解 文档存储类型的MongoDB

(文档存储一般用类似json的格式存储)

二、MongoDB

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统

在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

Nosql精粹这本书怎么样 nosql数据库入门与实践_数据存储_02

Nosql精粹这本书怎么样 nosql数据库入门与实践_数据存储_03

  • Schema: 相当于一个数据库的模板.
    Model可以通过mongoose.model集成其基本属性内容. 当然也可以选择不继承.
  • Model:基本文档数据的父类,通过集成Schema定义的基本方法和属性得到相关的内容.
  • instance: 真正的数据, 通过 new Model()初始化得到.

2.0 demo示例

const mongoose = require('mongoose');


mongoose.connect('mongodb://localhost:27017/test');
const con = mongoose.connection;
con.on('error', console.error.bind(console, '连接数据库失败'));
con.once('open',()=>{
    //定义一个schema
    let Schema = mongoose.Schema({
        category:String,
        name:String
    });
    Schema.methods.eat = function(){
        console.log("I've eatten one "+this.name);
    }
    
    //继承一个schema
    let Model = mongoose.model("fruit",Schema);
    
    //生成一个document
    let apple = new Model({
        category:'apple',
        name:'apple'
    });
    
    //存放数据
    apple.save((err,apple)=>{
        if(err) return console.log(err);
        apple.eat();
        //查找数据
        Model.find({name:'apple'},(err,data)=>{
            console.log(data);
        })
    });
})

2.1 install and connect mongoose

使用mongoose前,需要电脑已有 nodeJS和mongodb数据库.

下载mongoose:

npm install mongoose --save

连接mongoose:

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/test');
const con = mongoose.connection;
con.on('error', console.error.bind(console, '连接数据库失败'));
con.once('open',()=>{
    //成功连接
})

2.2 基本指令

  1. show dbs 显示数据库
  2. show collections 显示数据库中的集合
  3. db.<collection>.insert(doc) 插入文档
  4. db <collection>.insertMany(doc 插入多个

例如:

db.runoob.insert({"name":"erya"})

db.collection.insertMany(
   [ <document 1> , <document 2>, ... ],



  1. db.<collection>.find() 查看所有的文档
  2. db.<collection>.find({key:value}) 查看带有指定key value文档的集合
  3. db.<collection>.findOne({key:value}).name 查看指定key value的第一个文档
  4. db.<collection>.find({key:value}).count() 查看数量
  5. db.<collection>.find({key:value}).length() 查看数量
  6. db.<collection>.find().limit(num)限制查询出的数量
  7. db.<collection>.update(doc1,doc2) 把查询带有doc1的属性的文档用doc2替代
  8. db.student.update({age:1000},{$set:{strenth:10}}) 如何设置属性,没有属性可以增加属性
  9. db.student.update({age:1000},{$unset:{strenth:10}}) 删除strenth为key的条目
  10. db.student.remove(doc,isSingle)   删除一个或者多个
  11. db.student.deleteOne(doc) 删除一个
  12. db.student.deleteMany(doc) 删除多个
  13. remove(doc,true) 第二个参数传入true,则只删除一个
  14. remove({}) 全部删除

a. $ne不等于

例:查询x 的值不等于3 的数据

db.things.find( { x : { $ne : 3 } } );