MongoDB基础

数据库(database)
概述

数据库是按照数据结构组织、存储和管理数据的仓库。
我们的程序都是在内存中运行的,一旦程序运行结束或者计算机断电,程序运行中的数据都会丢失。
所以我们需要将一些程序运行的数据持久化到硬盘中,以确保数据的安全性。而数据库就是持久化的最佳选择。
数据库就是存储数据的仓库。

数据库分类

数据库主要分为两类:
关系型数据库(RDBMS):MySQL、Oracle、DB2、SQL server…都是关系型数据库,关系型数据库里全部都是表。
非关系型数据库(NoSQL Not Only SQL):MongoDB、Redis…都是非关系型数据库,采用键值对数据库、文档数据库。

MongoDB
概述

MongDB是为快速开发移动互联网Web应用而设计数据库系统。
MongDB的设计目标是极简、灵活、作为Web应用栈的一部分。
MongDB的数据库模型是面向文档的,所谓文档是一种类似于JSON的结构,简单理解MongDB这个数据库中存在的是各种各样的JSON数据。(BSON)

三个概念

数据库(database):数据库是一个仓库,在仓库中可以存放集合。
集合(collection):集合类似于数组,在集合中可以存放文档。
文档(document):文档数据中的最想单位,我们存储和操作的内容都是文档。

安装

MongoDB的版本偶数为稳定版,基数为开发板。
MongoDB对于32位系统支持不佳,所以3.2版本以后没有再对32位系统支持。
第一步:mongodb下载
第二步:将下载mongodb.tgz双击解压,移动到’usr/local/'目录下,[sudo mv mongodb /usr/local]。
第三步:配置环境变量打开.bash_profile,[open -e .bash_profile],加入如下配置后,使配置生效运行[source .bash_profile]。

export PATH=${PATH}:/usr/local/mongodb/bin

第四步:输入[mongod -version],查看是否安装成功。
第五步:需要手动创建db文件夹,mongodb默认不会自动创建[sudo mkdir /data/db]。
第六步:运行启动服务端[sudo mongod]。
第七步:另外启动一个控制台,进入mongodb,输入命令[mongo]。输入一下两行代码测试是否成功。

use admin;
db.shutdownServer();

如果安装过程中出现错误,一般是两种情况,路径问题’/data/db’或者权限问题

解决方法1:
1、删除.lock文件,[sudo rm /var/lib/mongodb/mongod.lock ]
2、修复mongodb,[mongod –repair]
3、启动mongod服务器,[sudo service mongod start]
4、启动mongo客户端,[mongo]

解决方法2:
1、cd /usr/local/mongodb/bin
2、./mongod –dbpath = /data/db/ --port 27017 [注意/data/db/为你创建的路径]

解决方法3:
1、在启动mongodb时,运行没有权限,[sudo mongod]
2、mongo

基本指令

[show dbs|show databases],显示当前的所有数据库。
[use 数据库名],进入到指定的数据库中。
[db],db表示的是当前所处的数据库。
[show collections],显示数据库中所有的集合。
[db..insert(document)],向集合中插入一个文档,例子:向test数据库stus集合中插入学生对象[db.stus.insert({name:“悟空”,age:18,gender:“男”})]。
[db..find()],查询当前集合中的所有文档。
需要注意的是当我们创建文档时,如果所在的文档的集合或数据库不存在会自动创建数据库和集合。

插入

[db..insert(document)],向一个集合中插入一个或多个文档。当我们向集合中插入文档时,如果没有给定文档的_id属性,则数据库会自动给文档添加_id,该属性作为文档的唯一标识。_id我们可以自己自定,如果我们指定了,数据库则不会自动添加,如果是自己添加的一定要确保的_id唯一性。
[db..insertOne(document)],插入一个文档对象。
[db..insertMany(document)],插入多个文档对象。

查询

[db..find()],find()用来查询集合中所有符合条件的文档,find()可以接收一个参数作为条件参数,{}表示查询集合中所有的文档,{属性:值}查询属性是指定值的文档。
[db..findOne()],用来查询集合中符合条件的第一个文档,findOne()返回的是一个对象。
[db..find({}).count() | db..find({}).length()],查询所有结果的数量。
[db..find({},{name:1,age:0})],投影就是显示哪些字段和不显示哪些字段,0为不显示,1为显示。

修改

[db..update(查询条件,新对象)],update()默认会使用新对象替换旧对象,如果需要修改指定的属性值需要使用"修改操作符"来完成修改[$set:可以修改文档中的指定属性 | $unset:可以用来删除文档的指定属性],update()默认只会修改一个文档对象,{upsert:, multi:, writeConcern:, collation:}可以指定如上属性做相应操作。
[db..updateOne()],修改一个符合条件的文档。
[db..updateMany()],修改多个符合条件的文档。
[db..replaceOne()],替换一个符合条件的文档。

删除

[db..remove()],删除一个或多个,可以将第二个参数传递一个true,则只会删除一个。如果传递一个空对象作为参数,则会删除所有。
[db..deleteOne()],删除一个文档对象。
[db..deleteMany()],删除多个文档对象。
[db..drop()],删除集合。
[db..dropDatabase()],删除数据库。
一般数据库中都不会全部删除,都会通过一个字段作为标识删除或者未删除,在通过fond(isFlag:0)进行一个查询获取未删除的数据,如果isFlag:1,则标识逻辑删除。

条件运算符

(>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<=) 小于等于 - $lte

方法

Limit()方法:如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
Skip()方法:我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
Sort()方法:在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。例子[db..find().sort({KEY:1})]。

文档之间的关系

一对一(one to one)

//一对一
db.wifeAndHusband.insert([
	{
		name:"黄蓉",
		husband:{
			name:"郭靖"
		}
	},
	{
		name:"武大郎",
		husband:{
			name:"潘金莲"
		}
	}
]);

db.wifeAndHusband.find();

一对多(one to many)|多对一(many to one)

//一对多
db.user.insert([
	{
		username:"swk"
	},
	{
		username:"zbj"
	}
]);

db.order.insert([
	{
		list:["牛肉","猪肉"],
		user_id:ObjectId("5c637b1d53a38b878a62f2f3")
	},
	{
		list:["桃子","橘子"],
		user_id:ObjectId("5c637b1d53a38b878a62f2f2")
	}
]);

db.user.find({});
db.order.find({});

//查找用户为zbj的订单
var user_id = db.user.findOne({username:"zbj"})._id;
db.order.find({user_id:user_id});

db.user.remove({});
db.order.remove({});

多对多(many to many)

//多对多
db.teachers.insert([
	{name:"洪七公"},
	{name:"黄药师"},
	{name:"龟仙人"}
]);

db.stus.insert([
	{
		name:"郭靖",
		tech_ids:[
			ObjectId("5c6381b653a38b878a62f2f8"),
			ObjectId("5c6381b653a38b878a62f2fa")
		]
	},
	{
		name:"刘德华",
		tech_ids:[
			ObjectId("5c6381b653a38b878a62f2f9"),
			ObjectId("5c6381b653a38b878a62f2fa")
		]
	}
]);

db.teachers.find();

db.stus.remove({});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值