你可以在mongodb官网下载该安装包,地址为:https://www.mongodb.com/download-center#community。
window安装mongodb教程:https://www.runoob.com/mongodb/mongodb-window-install.html
linux安装mongodb教程:https://www.runoob.com/mongodb/mongodb-linux-install.html
Mac OSX 安装教程:https://www.runoob.com/mongodb/mongodb-osx-install.html
mongodb特点:
MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
MongoDB安装简单。
mongodb支持的数据类型:
查看当前数据库名称:db
列出所有在物理上存在的数据库:show dbs
切换数据库 如果跑数据库不存在,则指向数据库,但不创建,直到插入数据或创建集合时才创建:use 数据库名称
查看当前数据库信息:db.stats()
db:当前数据库的名字。
collections:当前数据库的集合数。
objects:当前数据库所有集合总所包含的对象(即文档)的数量。
avgObjSize:每个文档的平均大小(以字节为单位)。
dataSize:此数据库中保存的未压缩数据的总大小,不是
指占有磁盘大小,单位是bytes。
storageSize:分配给此数据库的集合用于存储文档的空
间总量,也就是当前数据库占有磁盘大小,单位是bytes。
numExtents:当前数据库所有集合包含的扩展数量的统计。
indexes:数据库中包含的所有集合的索引总数,也就是system.indexes表数据行数。
indexSize:此数据库上创建的所有索引的总大小,单位是bytes。
删除数据库:db.dropDatabase()
创建集合:db.createCollection(name,options)
查看当前数据库所有集合:show collections:当前数据库的集合数
删除集合:db.集合名称.drop()
插入文档:db.集合名称.insert(document)
注意:插入文档时,如果不指定_id参数,MongoDB会为文档分配一个唯一的ObjectId
多条插入:db.stu.insert([{name:'王明',gender:1},{name:'王玲玲',gender:0}])
查询全部文档:db.stu.find()
更新文档:update() save()
update()更新已存在的文档
全文档更新:db.stu.update({name:'xxxxx'},{name:'张xxx'})
指定属性更新,通过操作符$set
db.stu.insert({name:'李自成',gender:1}) db.stu.update({name:'李自成'},{$set:{name:'闯王李自成'}})
修改多条匹配到的数据(跟新所有name为‘李自成’的文档的dender字段):
db.stu.update({name:'李自成'},{$set:{gender:0}},{multi:true})
save()方法:save() 方法通过传入的文档来替换已有文档,如果文档的_id已经存在则修改,如果文档的_id不存在则添加 db.集合名称.save(document)
db.stu.save({_id:'20180820101010','name':'保存',gender:1})
pretty():db.集合名称.find().pretty()
删除文档:remove()db.集合名称.remove(document)
:只删除1条,1表示是否只删除一条为true的意思
db.集合名称.remove(document,1)
db.集合名称.remove(document,{justOne:true})
表示删除全部
db.集合名称.remove({})
基本数据查询:db.集合名称.find({条件文档})
findOne():查询,只返回第一个
db.集合名称.findOne({条件文档})
比较运算符:
等于,默认是等于判断,没有运算符
小于$lt
小于或等于$lte
大于$gt
大于或等于$gte
不等于$ne
条件运算符:查询时可以有多个条件,多个条件之间需要通过逻辑运算符连接
逻辑与:默认是逻辑与的关系
逻辑或:使用$or:db.stu.find({$or:[{age:{$gt:18}},{gender:1}]})
and和or一起使用:db.stu.find({$or:[{age:{$gte:18}},{gender:1}],name:'gj'})
范围运算符使用"$in","$nin" 判断是否在某个范围内:db.stu.find({age:{$in:[18,28]}})
支持正则表达式:db.stu.find({name:/^黄/}) db.stu.find({name:{$regex:'^黄'}}})
自定义查询:db.stu.find({$where:function(){return this.age>20}})
$type:
想要获取某一中类型的数据 例如:如果想获取 "col" 集合中 title 为 String 的数据,你可以使用以下命令:
db.col.find({"title" : {$type : 'string'}})
Limit与Skip方法:
limit() 方法读取指定数量的数据记录
基本语法如下所示:
db.COLLECTION_NAME.find().limit(num)
Skip() 方法使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
基本语法格式如下:
db.集合名称.find().skip(num)
limit() 方法、Skip() 方法 同时使用,不分先后顺序表示跳过多少条,返回多少条
查询第5至8条数据
db.stu.find().limit(4).skip(5)
或
db.stu.find().skip(5).limit(4)
sort() 方法排序:
sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
基本语法如下所示:
升序
db.集合名称.find().sort({要排序的字段:1})
降序
db.集合名称.find().sort({要排序的字段:-1})
根据多个字段排序: 例:先根据年龄做降序,再根据性别做升序
db.集合名称.find().sort({age:-1,gender:1})
注意:skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()。
distinct() 去重
基本语法如下所示:
db.集合名称.distinct('去重字段',{条件})
例1:查找年龄大于20的姓名(去重)
db.集合名称.distinct('name',{age:{$gt:20}})
project投影(可以指定想要返回的字段)
在查询到的返回结果中,只选择必要的字段,而不是选择一个文档的整个字段
语法: 参数为字段与值,值为1表示显示,值为0不显示
db.集合名称.find({},{字段名称:0,...})
count() 统计个数
db.集合名称.count({条件})
表示返回集合中的文档数量
db.集合名称.find().count() db.集合名称.find({条件}).count()
在count()函数中添加条件
例:统计年龄大于20的男生人数
db.集合名称.count({age:{$gt:20},gender:1})