Mongo学习第一课

日期:2014年12月27日 周六

信息收集

MongoDB: The Definitive Guide 的豆瓣主页
Mongodb官方文档

  • 评价都是来自中文版,看了看价格,40刀确实是贵了,默默的准备下载免费的PDF吧,中英对照着看。
  • 评论提及官方文档似乎更好。
  • 该书适合入门,对应另外一本《mongoDB 50 tips》偏设计多些。
  • 比对其他书籍的目录和评论发现自己入门把官方文档看一遍就差不多了。有更加深的需求在细致地进行学习。

MongoDB简介

MongoDB是开源的文档型数据库数,每条记录对应一个文档,文档类似于JSON的数据格式组织在一起,文档型数据库数的几个有点:

  • 文档格式能够响应多种编程语言。
  • 嵌套的文档减少了昂贵的join导致的开销。
  • Dynamic schema supports fluent polymorphism ?

MongoDB的关键特性(牛皮轻吹~)

  • 高性能
  • 高可用性
  • 可伸缩性

安装

在Mac下安装MongoDB有两种方法,如下介绍通过OS X package manager Homebrew安装的步骤:

$ brew update
$ brew install mongodb

开始使用

以下部分介绍使用mongo shell做基本的数据库操作, mongo标准的MongoDB发布的一部分,它提供了一个特性完全的JavaScript环境以及所有MongoDB的接口。

连接数据库
  • 简单地通过mongod我们启动了MongoDB,通过mongo我们连接到了MongoDB的server。

  • 启动以后,默认使用名为 test 的数据库;通过 db可以查看当前所在数据库;通过show dbs会展示所有的数据库;通过use mydb可以切换到对应数据库;mydb不存在,use mydb也能成功(通过db查看的结果是mydb),但是show dbs命令的结果中不包含mydb,因为mydb要在插入数据以后才会被真正创建。

  • 通过 help可以查看帮助; 甚至你可以通过后面添加.help()查看方法对象的使用。

创建集合和插入文档

在下面的例子中,我们使用数据库mydb,插入文档到一个新的集合testData。

当集合第一次被使用的时候,MongoDB会隐式地创建它,因此在插入数据之前你无需创建它,并且因为MongoDB使用的动态的表,在插入问的那个之前你不需要提前定义好文档结构。

  1. 确保使用是mydb,不是的话切换到mydb
  2. 创建两个文档

    j = { name : "mongo" }
    k = { x : 3 }

  3. 插入文档到集合中

    db.testData.insert( j )
    db.testData.insert( k )

  4. 查看集合是否生成

    show collections

  5. 查看结合中的文档

    db.testData.find()
    { "_id" : ObjectId("549d5a4c341aee5d3faa5c77"), "name" : "mongo" }
    { "_id" : ObjectId("549d5a50341aee5d3faa5c78"), "x" : 3 }

所有的 MongoDB 文档必须有唯一的 _id值,mongo在插入文档到集合的时候会自动创建这么一个唯一的ObjectId作为_id的值。

使用for循环插入文档

在mongo shell中通过执行如下代码可以批量插入一定数量的假数据:

for (var i = 1; i <= 25; i++) {
   db.testData.insert( { x : i } )
}

通过db.testData.find()只能显示前20条数据,find()会返回游标cursor,在shell中键入下it会将剩余的数据都显示出来。

使用JavaScript方法插入文档

也可以在~/.mongorc.js中插入JavaScript方法:

function insertData(dbName, colName, num) {
  var col = db.getSiblingDB(dbName).getCollection(colName);
  for (i = 0; i < num; i++) {
    col.insert({x:i});
  }
  print(col.count());
}

然后再在shell中执行:

insertData("mydb", "testData", 400)
使用游标
  • 使用循环+游标来遍历集
var c = db.testData.find()
while ( c.hasNext() ) printjson( c.next() )
  • 使用游标做数组操作
var c = db.testData.find()
printjson( c [ 4 ] )
  • 查询特殊的文档
db.testData.find( { x : 18 } )
  • 返回一个文档(不同于find会返回包含所有结果的游标)
db.testData.findOne()
  • 限制返回文档的条数
db.testData.find().limit(3)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容