MongoDB常用密令(二)


1.nosql(被应用与互联网领域)

      NoSQL(Not OnlySQL ),意即“不仅仅是SQL” ,指的是非关系型的数据库 。是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
关系型数据库中的表都是存储一些结构化的数据,每条记录的字段的组成都一样,即使不是每条记录都需要所有的字段,但数据库会为每条数据分配所有的字段。而 非关系型数据库以键值对(key-value)存储,它的结构不固定,每一条记录可以有不一样的键,每条记录可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销


2.nosql优缺点

在优势方面主要体现在下面几点:
      简单的扩展
      快速的读写
      低廉的成本
      灵活的数据模型
在不足方面主要有下面几点:
      不提供对SQL的支持
      支持的特性不够丰富

      现有的产品不够成熟


3.Mongodb简介
      MongoDB是用 C++语言编写的非关系型数据库。特点是 高性能、易部署、易使用,存储数据十分方便,主要特性有:
面向集合存储易于存储对象类型的数据(mongodb中使用json    redis中使用hash
模式自由
支持动态查询
支持完全索引,包含内部对象
支持复制和故障恢复
使用高效的二进制数据存储,包括大型对象
文件存储格式为 BSON( 一种 JSON 的扩展 )
 

4.非关系型数据库与关系型数据库的对比



5.Mongodb基本概念

文档(document)是MongoDB中数据的基本单元, 非常类似于关系型数据库系统中的行(但是比行要复杂的多)
集合(collection)就是一组文档,如果说MongoDB中的文档类似于关系型数据库中的行,那么 集合就如同表
MongoDB的单个计算机可以容纳多个独立的数据库,每一个数据库都有自己的集合和权限
MongoDB自带简洁但功能强大的JavaScript shell,这个工具对于管理MongoDB实例和操作数据作用非常大(可以编写js脚本)
每一个文档都有一个特殊的键"_id"(不指定时有mongodb自己维护),它在文档所处的集合中是唯一的,相当于关系数据库中的表的主键

mongodb基本类型

数据类型       描述                                                                   举例

null           表示空值或者未定义的对象                                                {"x":null}

布尔值               真或者假:true或者false                                                 {"x":true}

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

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

64位浮点数      64位浮点数。shell中的数字就是这一种类型                        {"x":3.14,"y":3}

字符串               UTF-8字符串                                                          {"foo":"bar"}

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

对象id              文档的12字节的唯一id                                                    {"id": ObjectId()}

日期                  从标准纪元开始的毫秒数                                                    {"date":new Date()}

正则表达式       文档中可以包含正则表达式,遵循JavaScript的语法            {"foo":/foobar/i}

代码                  文档中可以包含JavaScript代码                                     {"x":function() {}} 

未定义               undefined                                                                            {"x":undefined}

数组                  值的集合或者列表                                                            {"arr": ["a","b"]}

内嵌文档          文档可以作为文档中某个key的value                         {"x":{"foo":"bar"}}

 


6.Mongodb常用操作

•       创建或切换数据库(有就切换没有就创建),使用命令 use 数据库名称 ,如:
use db1
•       删除当前数据库,使用命令
db.dropDatabase()

•       查看所有数据库,使用命令

show dbs

•        查看当前所在数据库,使用命令
db
•       查看当前数据库中所有的集合,使用命令
show collections
show tables
•       创建集合有两种方式,显示创建和隐式创建
显示创建可以使用命令
db.createCollection(“ 集合名称 ")
隐式创建可以使用命令
db. 集合名称 .insert({}), 指创建集合并同时向集合中插入数据 , 例如: db.customer.insert({name:”jack”})
•       向集合添加文档,使用命令 db.集合名称.insert({}),例如:
db.user1.insert({name:”jack”,age:20})
•       删除集合中的文档,使用命令 db.集合名称.remove({删除条件})
不加删除条件为删除集合中的所有文档
db.c1.remove({}) 为删除 c1 集合中的所有文档
删除c1集合中name为user1的文档
db.c1.remove({name:”user1”})
•       查询集合中的文档,可以使用命令 db.集合名称.find({条件}),或者使用 db.集合名称.findOne() 查询第一个文档
for(var i=0;i<100;i++){
   db.coll02.insert({name:"zhangsan"+i,age:18})
}
db.coll02.find()
db.coll02.findOne()
•       查询集合中的文档,返回某些特定的键值
db.coll02.find({ 条件 },{ 显示或隐藏的字段 })
 
查询coll02集合返回结果中不包含age字段(0不包含,1包含)
db.coll02.find({},{age:0})
查询coll02集合返回结果中包含age和name字段
db.coll02.find({},{age:1,name:1})
•       查询集合中的文档 ,使用条件表达式(<, <=, >, >=,!=)
插入测试数据
for(vari=10;i<100;i++){
   db.coll03.insert({name:"zhangsan"+i,age:i})
}
//大于: age > 50
db.coll03.find({age:{$gt:50}})
//小于: age < 20
db.coll03.find({age:{$lt:20}})
//大于等于: age >=10
db.coll03.find({age:{$gte:10}})
//小于等于: age <= 60
db.coll03.find({age:{$lte:60}})
//不等于:  age!= 10
db.coll03.find({age:{$ne:10}})
•       查询集合中的文档 ,统计(count)、排序(sort)、分页(skip、limit)
db.coll03.count()
db.coll03.find().count()
db.coll03.find({age:{$gt:50}}).count()
db.coll03.find().sort({age:-1})
db.coll03.find().sort({age:-1}).skip(10).limit(20)
db.coll03.find().sort({age:1}).skip(10).limit(20)
db.coll03.find().sort({age:-1}).skip(10).limit(20).count(0)
b.coll03.find().sort({age:1}).skip(10).limit(20).count(1)
•       查询集合中的文档 ,$all主要用来查询数组中的包含关系,查询条件中只要有一个不包含就不返回
db.coll04.insert({name:"person",age:[60,70,80,90,100]})
db.coll04.insert({name:"wugui",age:[80,90,100,110,120,130,140]})
db.coll04.insert({name:"anmial",age:[10,20,30,80]})
db.coll04.find({age:{$all:[80,90]}})
•       查询集合中的文档 ,$in,类似于关系型数据库中的IN
db.coll04.find({age:{$in:[30,70,140]}})
•       查询集合中的文档 ,$nin,与$in相反
db.coll04.find({age:{$nin:[70,140]}})
•       查询集合中的文档 ,$or,相当于关系型数据库中的OR,表示或者的关系,例如查询age中有70的或name是wugui的的文档,命令为:
db.coll04.find({$or:[{age:{$in:[70]}},{name:"wugui"}]})
db.coll03.find({$or:[{name:"zhangsan66"},{name:"zhangsan88"}]})
•       查询集合中的文档 ,$nor,表示 根据条件过滤掉某些数据,例如查询name不是user2,age不是3的文档,命令为:
db.coll03.find({$nor:[{name:"zhangsan66"},{name:"zhangsan88"}]})
•       查询集合中的文档 ,$exists,用于查询集合中存在某个键的文档或不存在某个键的文档
$exists:1表示真,指存在
$exists:0表示假,指不存在
db.coll03.insert({name:"lisi",age:99,love:"eat"})
db.coll03.find({name:{$exists:0}})
db.coll03.find({name:{$exists:1}})
db.coll03.find({love:{$exists:1}})
db.coll03.find({love:{$exists:0}})
•       查询集合中的文档 ,类似于关系型数据库,mongodb中也有游标的概念
//Mongodb 游标概念
var coll03Var=db.coll03.find();
coll03Var.hasNext()
coll03Var.next()
•       更新集合中的文档,语法如下:
db.collection.update(criteria,objNew,upsert,multi)
参数说明:
criteria:用于设置查询条件的对象
objNew:用于设置更新内容的对象
upsert:如果记录已经存在,更新它,否则新增一个记录,取值为0或1
multi:如果有多个符合条件的记录,是否全部更新,取值为0或1
注意:默认情况下,只会更新第一个符合条件的记录
一般情况下后两个参数分别为0,1 ,即:
db.collection.update(criteria,objNew,0,1)
•       更新集合中的文档,将集合中name为user1的文档改成name为jack
age会覆盖name为lisi4的文档
db.coll04.update({name:"lisi4"},{age:88},0,1)
•       更新集合中的文档, $set 用来指定一个键的值,如果这个键不存在,则创建它。例如:
$set只更新文档中的age字段其他字段不变
db.coll04.update({name:"lisi4"},{$set:{age:88}},0,1)
db.coll04.update({name:"lisi5"},{$set:{age:88}},1,1)
db.coll05.update({name:"lisi4"},{$set:{birthday:newDate()}},1,1)
•       更新集合中的文档,使用 $inc 将集合中name为user1的age加1,其它键不变, $inc表示使某个键值加减指定的数值
db.coll05.update({name:"lisi4"},{$inc:{age:10}})
 
•       更新集合中的文档,可以使用命令
db.coll05.update({name:"lisi4"},{$unset:{love:-1}})

use db01

show dbs

db.dropDatabase()

show collections

show tables

//显示创建集合

db.createCollection("coll01")

//隐式创建集合

db.coll02.insert({name:"zhangsan",age:18})

//coll01插入100条记录

for(var i=0;i<100;i++){

    db.coll01.insert({name:"zhangsan"+i,age:18})

}

//删除coll01 name=zhangsan0

db.coll01.remove({name:"zhangsan0"})

//删除所有

db.coll01.remove({})

 

db.coll01.find().count()

db.coll02.find().count()

db.coll02.findOne()

db.coll02.find({},{age:0})

db.coll02.find({},{age:1,name:1})

 

for(var i=10;i<100;i++){

    db.coll03.insert({name:"zhangsan"+i,age:i})

}

//比较运算符

db.coll03.find({age:{$gt:50}}).count()

db.coll03.find({age:{$lt:20}}).count()

db.coll03.find({age:{$gte:30}}).count()

db.coll03.find({age:{$lte:10}}).count()

db.coll03.find({age:{$ne:10}}).count()

//分页 统计(count)、排序(sort)、分页(skip、limit)

db.coll03.count()

db.coll03.find().count()

db.coll03.find({age:{$gt:50}}).count()

db.coll03.find().sort({age:-1})

db.coll03.find().sort({age:-1}).skip(10).limit(20)

db.coll03.find().sort({age:1}).skip(10).limit(20)

db.coll03.find().sort({age:-1}).skip(10).limit(20).count(0)

db.coll03.find().sort({age:1}).skip(10).limit(20).count(1)

 

//$all

db.coll04.insert({name:"person",age:[60,70,80,90,100]})

db.coll04.insert({name:"wugui",age:[80,90,100,110,120,130,140]})

db.coll04.insert({name:"anmial",age:[10,20,30,80]})

db.coll04.find({age:{$all:[80,90]}})

//$in

db.coll04.find({age:{$in:[30,70,140]}})

//$nin

db.coll04.find({age:{$nin:[70,140]}})

//$or  $nor

db.coll04.find({$or:[{age:{$in:[70]}},{name:"wugui"}]})

db.coll03.find({$nor:[{name:"zhangsan66"},{name:"zhangsan88"}]}).count()

//$exists

db.coll03.insert({name:"lisi",age:99,love:"eat"})

db.coll03.find({name:{$exists:0}})

db.coll03.find({name:{$exists:1}})

db.coll03.find({love:{$exists:1}})

db.coll03.find({love:{$exists:0}})

 

//Mongodb游标概念

var coll03Var=db.coll03.find();

coll03Var.hasNext()

coll03Var.next()

 

//update

for(var i=0;i<5;i++){

    db.coll05.insert({name:"lisi"+i,age:20+i,love:"study"});

}

db.coll05.find()

db.coll05.update({name:"lisi1"},{age:88})

db.coll05.update({name:"lisi5"},{$set:{age:88}},1,1)

db.coll05.update({name:"lisi4"},{$set:{birthday:new Date()}},1,1)

db.coll05.update({name:"lisi4"},{$inc:{age:10}})

db.coll05.update({name:"lisi4"},{$unset:{love:-1}})

 

//索引创建

db.coll03.ensureIndex({name:1})

db.coll03.dropIndex("name_1")

db.coll03.stats()

db.coll03.find({key:1}).explain()


7.索引

•       创建普通索引,使用命令
db.collection.ensureIndex({key:1})
•        查看关于索引的相关信息,使用命令
db.collection.stats()
•        查看查询使用索引的情况,使用命令  
db.collection.find({key:value}).explain()
•        删除索引,使用命令
  db.collection.dropIndex({key:1})
•        删除集合,也会将集合中的索引全部删除
•       创建唯一索引,使用命令
  db.collection.ensureIndex({key:1} {unique:true})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值