基本操作命令:http://blog.csdn.net/shirdrn/article/details/7105539
O、特殊操作符
$gt 大于(greater than)
$lt 小于(less than)
$gte 大于等于(greater than equal)
$lte 小于等于(less than equal)
$ne 不等于(no equal)
$eq 等于(equal)
$or 或
$type 基于BSON类型来检索集合中匹配的数据类型,并返回结果
pretty() 格式化输出
一、连接
1.启动MongoDB服务。在bin目录下执行mongod即可。
2.启动MongoDB shell。在cmd中执行mongo即可。
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
-
mongodb:// 这是固定的格式,必须要指定。
-
username:password@ 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登陆这个数据库
-
host1 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。
-
portX 可选的指定端口,如果不填,默认为27017
-
/database 如果指定username:password@,连接并验证登陆指定数据库。若不指定,默认打开 test 数据库。
-
?options 是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开
默认连接的是“test”数据库
切换数据库:use + 数据库名
显示连接的数据库名:db
显示数据库名及容量:show dbs
添加数据库用户:
db.createUser({user:"xyj",pwd:"123456",roles:[{role:"root",db:"admin"}]})
验证用户身份:
db.auth('xyj','123456') 返回1则正确
二、创库
use + 数据库名
如果数据库不存在,则创建数据库,否则切换到指定数据库。
新创建的库在插入数据后,可以用show dbs查看到
三、删库
删除当前数据库:db.dropDatabase()
删除集合:db.collection.drop()
四、插入文档
所有存储在集合中的数据都是BSON格式,BSON是一种类json的一种二进制形式的存储格式。
db.COLLECTION_NAME.insert(document)
db.COLLECTION_NAME.insert([document,document])
五、更新文档
使用update()和save()方法来更新集合中的文档。
update()方法用于更新已存在的文档。 db.collection.update(<query>,<update>,{false,false}),第一个true/false表示找不到时是否新增,第二个true/false表示是否只更新第一条。
save()方法通过传入的文档来替换已有文档。id识别。
六、删除文档
remove()函数是用来移除集合中的数据。在remove()前先执行find()来判断执行的条件是否正确,是比较好的习惯。
db.collections.remove(<query>,{true,}). 条件;是否只删除一个文档
remove()方法已经过时了,现在官方推荐使用deleteOne()和deleteMany()方法。
db.collections.deleteOne({status:"D"})
db.collections.deleteMany({})
七、查询文档
mongodb使用find()方法来进行文档的查询。
db.collections.find({query },projection) query查询条件,多条件可以通过逗号隔开
projection指定返回的键
如
db.collection.find(query, {title: 1, by: 1}) // inclusion模式 指定返回的键,不返回其他键
db.collection.find(query, {title: 0, by: 0}) // exclusion模式 指定不返回的键,返回其他键
find().limit(int)指定从mongodb中读取的记录条数
find().skip(int)跳过指定数量的数据
find().sort({key:1})按照key对数据进行排序,1为升序,-1为降序
三者的执行顺序为: sort() skip() limit()
八、索引
索引是特殊的数据结构,存储于一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。
mongodb使用ensureIndex()方法来创建索引
db.collections.ensureIndex({key:1}) key为要创建的索引字段,1为按升序创建索引,-1为降序
mongodb使用dropIndexes()方法来删除索引
mongodb使用getIndexes()方法来查看索引
九、聚合 http://blog.csdn.net/vbirdbest/article/details/77102999 https://www.cnblogs.com/liruihuan/p/6686570.html
聚合(aggregate)主要用于处理数据(平均值,求和),并返回计算后的数据结果。
mongodb中聚合的方法使用aggregate()
$match 筛选条件,过滤掉不满足条件的文档,可以使用常规的查询操作符,如gt,lt,$in等
db.collections.aggregate({$match:{"age":{$gt:20}}}).pretty()
$projct投射,用于包含、排除字段: 0不显示,1显示
db.collections.aggregate({$project:{_id:0,name:1,birth:"$age"}}).pretty()
$group分组,将集合中的文档进行分组,可用于统计结果
db.collections.aggregate({$group:{_id:"$name",total:{$sum:1}}}).pretty()
聚合的相关函数可以同时使用,用逗号隔开即可。
十、备份(mongodump)与恢复(mongorestore)
cmd cd到bin目录下。 C:\Program Files\MongoDB\Server\3.4\bin
端口号?
备份: mongodump -d runoob -o c:\data\dump
还原: mongorestore -h 127.0.0.1:27017 -d runoob --drop C:\data\dump\runoob
十一、容量
???
十二、JSON
JSON: JavaScript Object Notation(JavaScript对象表示法)
JSON是存储和交换文本信息的语法。类似XML
JSON是轻量级的文本数据交换格式
JSON比XML更小、更快,更易解析
JSON独立于语言和平台。
JSON纯文本,具有层级结构
十三、BSON
BSON简称二进制的JSON,是JSON的二进制序列化编码格式,像JSON一样,BSON支持文档数组,支持二进制压缩格式。
特性:
1 轻量级 保持空间的开销最低,重要的是,任何数据表示格式,尤其是当在网络上使用
2 可遍历 BSON是被设计成更加容易的遍历访问。
3 高效 从BSON编码和解码数据,可以非常迅速地在大多数语言中。
目前只要用于MongoDB中,是MongoDB的数据存储格式。基于JSON
十四、上传下载pdf文件(MongoDB与GridFS)
MongoDB可以直接作为一个存储小文件(16M)的分布式文件系统,主要依赖于以下三点:
1、MongoDB可以直接存储二进制数据
2、MongoDB可以部署成分片集群,实现海量数据存储、读写分离
集群中的片可以部署成复制集,保证数据的可靠性
对文件的存储方式有两种:一种是像存储普通数据那样,将文件转化为二进制数据存入mongodb,另一种使用gridfs。
博文:https://www.cnblogs.com/bonelee/p/6513657.html http://www.cnblogs.com/lipan/archive/2011/03/21/1989409.html
具体第一种方法有待研究。
GridFS的使用场景
document的大小超过16M是使用GridFS的条件之一,另外:
①如果你的文件系统对每个目录下文件的个数有限制(或者太多,将会影响文件的打开速度)
②如果你的文件数据,有分数据中心镜像保存(大数据情况,可用性保证)
③如果你希望访问一个超大的文件,而不希望将它全部加入内存,而是有“range access”的情况,即分段读取,那么GridFS天生就具备这种能力,你可以随意访问任意片段。
对于一个大文件,如果你希望原子性的更新它的全部内容,那么GridFS将不适合;比如同时更新一个文件的多个chunk,因为mongodb本身没有事务机制。
使用mongofiles.exe进程,可实现对文件的上传。
命令行cd到bin目录下,输入
上传文件mongofiles.exe -h 192.168.130.129 --port 27017 -d PDFS --local D:\AAA.pdf put mongodb_introduction.pdf
下载文件mongofiles.exe -h 192.168.130.129 --port 27017 -d PDFS --local D:\BBB.pdf get mongodb_introduction.pdf
查询文件mongofiles.exe -h 192.168.130.129 --port 27017 -d PDFS search algorithm_introduction.pdf
删除文件mongofiles.exe -h 192.168.130.129 --port 27017 -d PDFS delete algorithm_introduction.pdf
GridFS的分布式文件系统,GridFS是基于MongoDB的数据库、集合、文档对象。当上传一个大文件到GridFS系统时,MongoDB自动将文件分割成256K的小块。然后将小块插入到数据库默认的集合fs.chunks中,同时将整个大文件的元数据信息插入到数据库的集合fs.files中。
总结:对于在MongoDB中存储大于16M的文件,我们应该用GridFS系统,它的性能要比操作系统的文件系统高效;对于小于16M的文件直接利用MongoDB的文档对象进行存储来的更高效,可以用二进制数据类型存储图片、视频等文件。
十五、本地windows远程连接虚拟机的mongodb主机
环境:本地windows7 64位,开了虚拟机vm。
目的:虚拟机启动mongodb,作为服务器,本地windows进行连接
连接前的测试:分别在本地和虚拟机的cmd中输入ipconfig,得到“无线局域网适配器 无线网络连接”下的IPV4地址。我的本地为192.168.1.102,虚拟机为192.168.130.129。互相ping ip地址,ping就可以进行下一步连接。
连接:首先虚拟机上启动mmongodb,注意bind_ip=192.168.130.129,默认为127.0.0.1只能进行本地连接。
“mongod --config "c:\..\..\mongod.cfg" ” 其中文件mongod.cfg中为:
logpath= c:\data\log\mongod.log
dbpath= c:\data\db
storageEngine= mmapv1
bind_ip= 192.168.130.129
然后在本地windows中cmd中输入 mongo 192.168.130.129:27017 。 连接成功后,就可以随意查询了。
想本地下载服务器上的GridFS文件,需要cd到bin目录,然后输入:
mongofiles.exe -h 192.168.130.129 --port 27017 -d PDFS --local D:\BBB.pdf get mongodb_introduction.pdf即可