MongoDB学习笔记分享

1,601 阅读4分钟

简介

什么是NoSQL?

NoSQL,指的是非关系型的数据库。

没有行、列的概念。用 JSON 来存储数据。集合就相当于 SQL 数据库中的“表”,文档就相当于“行”。

适用于:

  1. 数据模型比较简单;

  2. 需要灵活性更强的IT系统;

  3. 对数据库性能要求较高;

  4. 不需要高度的数据一致性;

  5. 对于给定key,比较容易映射复杂值的环境。

什么是MongoDB?

官网:www.mongodb.com

手册:docs.mongodb.org/manual

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

MongoDB安装及运行

下载最新的stable版:www.mongodb.com/download-ce…

安装好之后,我们看一下安装的文件夹,例如:
C:\Program Files\MongoDB\Server\3.0\bin,将其加入到系统的path环境变量中,那么我们就能在系统的任何盘符,使用mongo命令了。

mongo   使用数据库
mongod  开机
mongoimport  导入数据
  1. 启动mongod服务
alt text image

–dbpath就是选择数据库文档所在的文件夹。

  1. 管理数据库(新开一个cmd)
alt text image

那么,运行环境就是mongo语法了。

MongoDB常用操作

查看所有数据库

show dbs

使用数据库、创建数据库

use test

use一个不存在的,就是新建。

查看当前所在数据库

db

插入数据

数据库中不能直接插入数据,只能往集合(collections)中插入数据。不需要创建集合,只需要写点语法:

db.student.insert({"name":"Davis","age":"22","sex":"男"})

db.student 系统发现student是一个陌生的集合名字,所以就自动创建了集合。

删除数据库

删除当前数据库

db.dropDatabase();

数据库使用

插入数据

插入数据,随着数据的插入,数据库创建成功了,集合也创建成功了。

db.student.insert({"name":"Davis","age":"22","sex":"男"})

我们不可能一条一条的insert。所以,我们希望用sublime在外部写好数据库的形式,然后导入数据库:

导入json

mongoimport --db test --collection student --drop --file data.json

导入json数组

mongoimport --db test --collection student --drop --file data.json --jsonArray

-db test 想往哪个数据库里面导入
--collection student 想往哪个集合中导入
--drop 把已存在数据清空
--file data.json 哪个文件

这样,我们就能用sublime创建一个json文件,然后用mongoimport命令导入。

查找数据

  1. 查找数据,用find。find中没有参数,那么将列出这个集合的所有文档:

    db.student.find()
  2. 精确匹配

    db.student.find({"age":22})
  3. 多个条件

    db.student.find({"age":12, "sex":"男"})
  4. 大于条件

    db.student.find({"age":{$gt:20}})
  5. 或者(寻找所有年龄是20岁,或者22岁的学生)

    db.student.find({$or:[{"age":20},{"age":22}]});
  6. 查找完毕之后,打点调用sort,表示升(1)降(-1)排序

    db.student.find().sort({"age":1, "score.English":1})
  7. 查看当前Mongodb运行状态

    db.student.stats();

分页查询

通过 sike()limit() 方法

假如,第一页是page=0。每页10条,所以当前页的查询语句

db.student.find({}).limit(10).skip(page*10)

limit()表示读取的条数,sike()表示略过的条数。

修改数据

  1. 修改里面还有查询条件

查找名字叫做Davis的,把年龄更改为20岁:

db.student.update({"name":"Davis"},{$set:{"age":20}})

  1. 更改所有匹配项目

    db.student.update({"sex":"男"},{$set:{"age":20}},{multi: true});
  2. 完整替换,不出现$set关键字了

    db.student.update({"name":"Davis"},{"name":"dpf","age":20});

删除数据

  1. 删除集合中高数成绩为 60 的学生

    db.student.remove({'score.English':60});
  2. 删除第一条找到的记录可以设置 justOne 为 1

    db.student.remove({'score.English':60},1);

Mongoose

Mongoose,是一个将JavaScript对象与数据库产生关系的一个框架,object related model。所有的操作都不是对数据库进行的。而是对类、实例进行的,对象产生了,同时也持久化了。

官网:mongoosejs.com/

数据库连接

var mongoose = require('mongoose');
//创建数据库连接
var db = mongoose.createConnection('mongodb://127.0.0.1:27017/test');
//监听open事件
db.once('open', function (callback) {
    console.log("数据库成功连接");
});

定义模型

alt text image

创造schema → 定义一些schema的静态方法 → 创造模型

创造schema

new mongoose.schema({});

创造模型

db.model(“Student”,schema名字);

//创建了一个schema结构。
var studentSchema = new mongoose.Schema({
    name     :  {type : String},
    age      :  {type : Number},
    sex      :  {type : String}
});
//创建静态方法
studentSchema.statics.zhaoren = function(name, callback) {
    this.model('Student').find({name: name}, callback);   //this.model('Student')指的是当前这个类
};
//创建修改的静态方法
studentSchema.statics.xiugai = function(conditions,update,options,callback){
    this.model("Student").update(conditions, update, options, callback);
}
//创建了一个模型,就是学生模型,就是学生类。
//类是基于schema创建的。
var studentModel = db.model('Student', studentSchema);

MongoVUE连接MongoDB

不显示数据问题

mongoDB3.2版本之后默认开启的存储引擎是 wiredTiger,使用这种存储引擎存储的数据只能在命令行中看到,在 mongoVUE 中看不到。

所以,需要换成 mmapv1 操作引擎,此时就可以在 mongoVUE 中看到 Collections 下的内容

mongod --storageEngine mmapv1 --dbpath D:\mongo(路径)

选择 mmapv1存储引擎后,ns 后缀文件就是数据库