MongoDB入门学习一

 由于最近公司的一个项目需要使用大MongoDB数据库作为日志存储,虽然之前对MongoDB有过了解,但是却没有一些系统的了解,其中部分资源出资其他博客,若有涉及到您的利益,请多多谅解。

一.什么是MongoDB

MongoDB是一个用c++开发的,高性能、开源、无模式的文档型数据库,是当前NoSQL数据库中的一种。

二.MongoDB的使用场景

1.    用在应用服务器的日志记录,查找起来比文本灵活,到处也很方便。

2.    用在一些第三方信息的获取或者抓取,因为MongoDB的schema-less,所有格式灵活,不用为了各种格式不一样的信息专门设计统一的格式,极大的减少开发工作。

3.    用来存储一些监控数据。

4.    使用MongoDB做了O2O快递应用,将送快递骑手、快递商家的信息(包含位置信息)存储在MongoDB,然后通过MongoDB的地理位置查询,这样很方便的实现了查询附近的商家、骑手等功能。

5.    MongoDB的应用已经渗透到各个领域,比如游戏、物流、电商、内容管理等。

n  游戏:使用MongoDB存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询更新。

n  物流:使用MongoDB存储订单信息,订单状态在运送过程中会不断更新,以MongoDB内嵌数组的形式来存储,一次查询就可以将订单所有的变更读取出来。

n  社交:使用MongoDB存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。

n  物联网:使用MongoDB存储所有接入的只能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析。

n  视频直播:使用MongoDB存储用户信息、礼物信息等。

。。。。。。

三.MongoDB的主要特性

MongoDB特性

优势

事务支持

MongoDB目前只支持单文档事务,需要复杂事务支持的场景暂时不适合。

灵活的文档模型

Json格式存储最接近真实对象模型,对开发者友好,方便快开发迭代。

高可用复制集

满足数据高可靠、服务高可用的需求,运维简单,故障自动切换

可扩展分片集群

海量数据存储,服务能力水品扩展。

高性能

mmapv1、wiredtiger、mongorocks(rocksdb)、im-memeory等多引擎支持满足各种场景需求。

强大的索引支持

地理位置索引可用于构建各种o2o应用、文本索引解决搜索的需求、TTL索引解决历史数据自动过期的需求。

Gridfs

解决文件存储的需求。

Aggregration& mapreduce

解决数据分析场景需求,用户可以自己写查询语句或脚本,将请求都分发到MongoDB上完成。

四.MongoDB与关系型数据库的对比

对比项

MongoDB

关系型数据库(mysql、oracle)

数据库

数据库(database)

数据库(database、schema)

集合(Collection)

二维表(table)

表中的一行数据

文档(document)

一条记录(record)

表字段

键(key)

列(column)

主外键

主键pk、外键fk

灵活度扩展性

极高

五.MongoDB命令行客户端的脚本语法;

1.    下载MongoDB,地址:官方网站:http://www.mongodb.org/downloads;在windows系统下载MongoDB后,解压即可。在启动MongoDB之前,我们必须新建一个存放MongoDB数据和日志的目录。

2.    运行MongoDB服务端,打开cmd窗口,进入MongoDB解压目录下的bin目录下,运行mongod.exe。

C:\>cd C:\MongoDB\bin

C:\MongoDB\bin>mongod.exe --dbpath=C:\MongoDB\data\db

--directoryperdb  --logpath =C:\MongoDB\data\logs --logappend

一般来说,只需指定—dbpath即可。

3.    运行客户端,另外打开一个cmd窗口,进入到bin目录下,运行客户端的mongo.exe来登录MongoDB,启动shell,shell会在启动时自动连接MongoDB服务器,默认连接test数据库。

4.    脚本语法:

show dbs  //列出所有数据库

use memo  //使用数据库memo,即使这个库不存在也可执行,但该数据库不会立即被创建,只有执行insert操作时,才会创建。

show collections  //列出当前所有数据库的collections

db  //显示当前数据库

show users 列出用户

db.createCollection(‘XXX’) //创建集合

db.XXX.save()/ db.XXX.insert()  //往集合中插入数据,数据为json格式的键值对数据。

查询数据:

$lt  ->less than 小于

$lte ->less than and equal 小于等于

$gt  ->greaterthan 大于

$gte  ->greaterthan and equal 大于等于

$ne  ->not equal 不等于

MongoDB的查询语法与SQL查询的比较

db.foo.find() // select * from foo

db.foo.find().limit(10)  // select * from foo limit 10

db.foo.find().sort({x:1})  // select * from foo order by x asc  1:升序  -1:降序

db.foo.find().sort({x:1}).skip(5).limit(10)  // select * from foo order by x asc limit 5, 10

db.foo.find({x:10})  // select * from foo where x = 10

db.foo.find({x: {$lt:10}})  // select * from foo where x <= 10

db.foo.find({}, {y:true})  // select y from foo

一些SQL不能做的,MongoDB也可以做:

db.foo.find({"address.city":"gz"})  // 搜索嵌套文档address中city值为gz的记录

db.foo.find({likes:"math"})  // 搜索数组

db.foo.ensureIndex({"address.city":1})  // 在嵌套文档的字段上建索引

 更新数据:

db.XXX.update({},{}) 第一个参数是查询对象,第二个参数是替代的,可以在第二个对象里指定更新那些字段,要使用$set。$set用来指定一个键的值,如果不存在则创建,如果存在则更新。

删除条件查询:

db.XXX.remove()

删除数据集合:

db.XXX.drop();

删除当前数据库:

db.dropDatabase();


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值