MongoDB自学笔记

1.mongoDB简介

1.1简单介绍

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

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似jsonbson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引

MongoDB:基于分布式文件存储的数据库

redis:基于内存的高性能的key-value数据库

 

1.2数据介绍

mongodb中的基本概念是文档、集合、数据库,与sql对比如下:

SQL术语/概念

MongoDB术语/概念

解释/说明

database

database

数据库

table

collection

数据库表/集合

row

document

数据记录行/文档

column

field

数据字段/域

index

index

索引

table joins

 

表连接,MongoDB不支持

primary key

primary key

主键,MongoDB自动将_id字段设置为主键

MongoDB的默认数据库为"db",该数据库存储在data目录中。

 

数据类型

描述

举例

别名(来着官方文档)

 

null

Null

表示空值或者未定义的对象

{“x”:null}

“null”

 

布尔值

Boolean

真或者假:true或者false

{“x”:true}

“bool”

 

32位整数

32-bit integer

32位整数。shell是不支持该类型的,shell中默认会转换成64位浮点数

 

“int”

 

64位整数

64-bit integer

64位整数。shell是不支持该类型的,shell中默认会转换成64位浮点数

 

“long”

 

64位浮点数

 

64位浮点数。shell中的数字就是这一种类型

{“x”:3.14,”y”:3}

 

 

字符串

String

UTF-8字符串

{“foo”:”bar”}

“string”

 

符号

Symbol

shell不支持,shell会将数据库中的符号类型的数据自动转换成字符串

 

“symbol”

Deprecated.

对象id

ObjectId

文档的12字节的唯一id

{“id”: ObjectId()}

“objectId”

 

日期

Date

从标准纪元开始的毫秒数

{“date”:new Date()}

“date”

 

正则表达式

Regular Expression

文档中可以包含正则表达式,遵循JavaScript的语法

{“foo”:/foobar/i}

“regex”

 

代码

文档中可以包含JavaScript代码

{“x”:function() {}}

 

 

未定义

Undefined

undefined

{“x”:undefined}

“undefined”

Deprecated.

数组

 

值的集合或者列表

{“arr”: [“a”,”b”]}

 

 

内嵌文档

文档可以作为文档中某个key的value

{“x”:{“foo”:”bar”}}

 

 

 

数据类型

描述

String

字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。

Integer

整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。

Boolean

布尔值。用于存储布尔值(真/假)。

Double

双精度浮点值。用于存储浮点值。

Min/Max keys

将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。

Arrays

用于将数组或列表或多个值存储为一个键。

Timestamp

时间戳。记录文档修改或添加的具体时间。

Object

用于内嵌文档。

Null

用于创建空值。

Symbol

符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。

Date

日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。

Object ID

对象 ID。用于创建文档的 ID。

Binary Data

二进制数据。用于存储二进制数据。

Code

代码类型。用于在文档中存储 JavaScript 代码。

Regular expression

正则表达式类型。用于存储正则表达式。

mongodb默认端口是27017

mongodb可以不设账号密码,通过IP地址和端口直接链接

退出输入:exit

 

2.表内查询语句

1.1 固定条件查询:

注:mongodb中每条数据都有一个id,用来唯一标识一条数据,id由mongo本身来维护

(1)db.getCollection('patent').find({});//查询集合中所有的数据

(2)db.getCollection('patent').find({"id":"596577b78587822df6a74cfa"});//查询id=596577b78587822df6a74cfa的数据

(3)db.getCollection('patent').find({"id":"596577b78587822df6a74cfa"},{"type_name":1});

//查询id=596577b78587822df6a74cfa的数据,只返回type_name字段数据;两个大括号,前面的存查询条件,后面的存返回条件,返回条件字段1表示true,表示此字段返回,如果name后面的1改为0则表示不返回name字段,返回除name字段以外的其他字段

[1]注:如果设置返回字段有为0的已经表示查询所有除了某字段以外的所有字段就不能再设置某个字段为1了,有语法冲突

[2]注:多条件查询此处是并列,但是如果多个条件都相同的话如db.getCollection('patent').find({"id":"596577b78587822df6a74cfa","id":"597a23648587822df63b8b80"});则会只查询后一个条件的数据

(4)db.getCollection('patent').find({},{"id":1});//查询所有的数据,返回id字段

 

(5)db.getCollection('patent').findOne({})//查询集合的第一条数据

 

1.2筛选查询:

gt(greater than)大于;

lt(less than)小于;

gte(greater than equal)大于等于;

lte(less than equal)小于等于;

ne(not equal)不等于.

db.getCollection('testErin').find({"age":{$gt:22}});//查询age大于22的数据

 

db.getCollection('testErin').find({"age":{$gte:22,$lt:24}});

 

1.3包含:

(1)db.getCollection('testErin').find({"weight":{$all:[11,8,5]}});//(包含 并且 包含)此处weight是个数组,此方法查询所有weight包含5,8和11的数据

 

(2)db.getCollection('testErin').find({"weight":{$in:[10,5]}});//(包含 或者 包含)

(3)db.getCollection('testErin').find({"weight":{$nin:[20,18]}});//(不包含 并且 不包含),如果没有weight字段的document也会显示

 

(4)db.getCollection('testErin').find({$or:[{"name":"小明"},{"weight":{$in:[8]}}]});//or或者,name=小明或者weight中有8

 

(5)db.getCollection('testErin').find({$nor:[{"name":"小明","name":"二明"},{"weight":{$in:[1,10,15]}}]});//既不 也不

 

1.4分页:

(1)db.getCollection('testErin').find().skip().limit(5);第一页,5条数据

skip()默认0,表示起始位置,limit表示每页显示数量。

 

(2)db.getCollection('testErin').find().skip(5).limit(5);表示第二页

skip = (页数 - 1) * limit

 

1.5排序:

db.getCollection('testErin').find().sort({"age":-1});//按照年龄降序排序,为1的话表示升序排序

 

1.6存在

db.getCollection('testErin').find({"weight":{$exists:0}});//查询不存在weight字段的数据

注:测试发现只有0表示不存在,其他任意数表示存在

 

1.7删除:

db.getCollection('testErin').remove({age:20,name:"小明"});//删除age为20,name为小明的数据

注:条件同时满足才删除

 

1.8更新:

(1)db.getCollection('testErin').update({name:"二明"},{age:24});//将查询到的第一条name=“二明”的字段覆盖为age=24

 

(2)db.getCollection('testErin').update({name:"三明"},{$set:{age:28}});

//将查询到的第一条name:"三明"字段的age更新为28

 

(3)db.getCollection('testErin').update({name:"四明"},{$set:{age:28}},1,1);//将所有name=四明的字段的age更新为28.

       与(2)相比多了两个参数,第一个参数:表示如果没有符合条件的记录是否新增一条记录,1表示新增,0表示不新增;第二个参数:表示有多条数据符合筛选条件的话是否全部更改,默认为0只改第一条,改为1后表示全部更改。

 

(4)db.getCollection('testErin').update({age:21},{$set:{name:"明明明"}, $inc:{age:-2}},1,1);

更新所有age=21的字段修改name=明明明,并且所有age减2

$inc表示使某个键值加减指定的数值

 

 

 

(5)db.getCollection('testErin').update({name:"明明明"},{$unset:{age:1}},0,1);

//此处表示删除name=明明明 的age字段

$unset用来删除某个键

 

1.8索引

mongo默认为每条数据的_id字段建索引

(1)db.getCollection('testErin').ensureIndex({age:1});//为age字段建普通索引

(2)db.getCollection('testErin').dropIndex({age:1});//删除age字段的索引

(3)db.getCollection('testErin').ensureIndex({age:1},{unique:true});//为age字段建唯一索引,要求age值不重复

且 为字段建了唯一索引后就不能再添加相同值的记录了

 

db.getCollection('testErin').dropIndex({age:1},{unique:true});删除唯一索引

 

1.9数据备份/恢复、导出/导入

在网上查找的语句都无效,如下:

推荐使用可视化工具进行导入导出,非常方便,操作简单。例如:NoSQL Manager for MongoDB。

附:https://docs.mongodb.com/官方文档

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值