MongoDB学习笔记

一.数据库分类

  a)关系型数据库(RDBMS):mysql,Oracle,DB2,SQL Server

  b)非关系型数据库(NO SQL):

 MongoDB,Redis...

    键值对数据库

文档数据库MongoDB

二.MongoDB简介

数据模型是面向文档,一种类似json的数据结构。 数据库中存在是各种各样的JSON(BSON)

三.安装(windows环境)

 下载地址:https://www.mongodb.org/dl/win32/( 偶数为稳定版,奇数为测试版)

MongoDB学习笔记 

MongoDB学习笔记


设置环境变量:

MongoDB学习笔记

测试环境部署成功

MongoDB学习笔记

启动服务需要如下路径MongoDB学习笔记

创建文件路径后再启动,成功监听端口27017如下

MongoDB学习笔记

进行连接测试,直接cmd输入mongo

MongoDB学习笔记

语法跟JS类似.

db文件夹内如下:

MongoDB学习笔记



指定生成的数据库文件夹,命令如下:mongod --dbpath 具体路径 --端口号(可以省略。)

设置为系统服务:

https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/里面有详细教程

简化大致如下:

1.在data文件夹(即之前生成的数据库文件夹)内

 创建两个文件夹如下:db,log

2.在安装mongoDB的同bin文件夹目录下,创建配置文件mongod.cfg

3.配置文件里面添加如下:

systemLog:
    destination: file
    path: c:\data\log\mongod.log
storage:
    dbPath: c:\data\db
4.cmd内安装服务

sc.exe create MongoDB binPath= "\"C:\Program Files\MongoDB\Server\3.2\bin\mongod.exe\" --service --config=\"C:\Program Files\MongoDB\Server\3.2\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"
MongoDB学习笔记MongoDB学习笔记


服务安装完毕!



四.基本操作

 数据库--- 》集合----》文档
(数据库和集合都不需要手动创建,当创建文档时。会自动创建集合和数据库)

MongoDB学习笔记


指令:show dbs -显示当前所有数据库

  use 数据库名 -进入指定的数据库(如果没有,会暂时先进入,当创建文档的时候会自动创建数据库)

  db -显示当前的数据库

show collections -显示数据库中的所有集合

CRUD:

 insert: db.集合名.insert({数据});

  db.集合名.inset([{数据},{数据}]);

 每次插入一条数据,会自动根据时间戳和机器码来生成id,确保文档唯一性,也可以自己指定id,插入的时候

   _id;

  支持js语法:

  一次性添加4000条数据,先组织好数据,然后调用一次inset方法,提高效率

  var a = [];

for(var i=1;i<=4000;i++){

  a.push({num:i});

 }

db.集合名.insert(a);

  find:db.集合名.find();--查询所有的文档

 db.集合名.find({字段名1:值1,字段名2:值2}) --查询属性是指定值的文档,返回的是数组

  db.集合名.findOne()--用来查询集合中符合条件的第一个文档,返回的是对象

 db.集合名.find().count()--返回文档数量

mongoDB支持内嵌查询:

  db.集合名.find({"属性.内嵌属性名":"值"}); (支持数组内查询)

  一些操作符:

  db.集合名.find({"num":{$gt:500,$lt:1000}});查询1000>num>500的文档

  db.集合名.find().limit(10);--查出前10条数据

  db.集合名.find({$or:[{"num":{$lt:500,$gt:1000}}]});查询大于1000或者小于500的文档

  db.集合名.find().skip(10).limit(10);--查出11-20条数据。skip跳过对应条数数据

db.集合名.find().sort({num:1});--查询num按正序显示,-1为倒序

db.集合名.find({},{num:1}) --只查询出num这行数据

  skip(页数-1*每页条数).limit(每页条数)

  

 


MongoDB学习笔记

 update:

  db.集合名.update(查询条件,新对象)--修改指定文档,默认情况下使用新对象替换旧对象,只修改一条。

   如果要修改指定属性,而不是替换。则需要使用修改操作符,

   $set 可以用来修改文档中的指定属性

    $unset 用来删除文档中的指定属性

   例:db.test.update({name:"xuyi"},{$set:{age:18}}) --查询出name为xuyi的文档,把age更改为18,默认只改一条

  db.集合名.updateMany(查询条件,新对象)--修改所有符合条件的数据

  db.集合名.replaceOne(查询条件,新对象)--替换

db.集合名.update({查询条件},{$push:{属性名:值}})--数组中追加数据,不会考虑重复性

db.集合名.update({查询条件},{$addToSet:{属性名:值}})--数组中追加数据,考虑重复性

db.集合名.update({查询条件},{$inc:{"属性名":"值"}})--追加查询出的指定属性名的追加的值;

 delete:

  db.集合名.remove(条件); --删除符合条件的所有文档(默认),如果条件为空。则清空集合(性能差,因为先查,再删)

  删除一个的话:db.集合名.remove({条件},true);

  db.集合名.deleteOne();

 db.集合名.deleteMany();

 db.集合名.drop(); --删除集合

  db.dropDatabase(); --删除所有数据库

  

五.文档间的关系

  1.one-to-one:通过内嵌文档的模式

2.one-to-many

3.mant-to-many