MongoDB学习笔记

Windows上的安装方法:

  1. 下载,安装,可以从customer自定义安装路径后,例如我设置的安装路径为"F:\MongoDB",一直Next直到安装结束。
  2. 配置
    • 将安装路径下的bin目录添加到环境变量PATH中,例如我的是"F:\MongoDB\bin";
    • 配置MongoDB的存储路径,例如我配置的是"F:\MongoDB\data\db",就是在"F:\MongoDB"这个文件夹下新建"data\db"这种目录结构;
    • 将MongoDB注册为服务,以方便日后的使用:
      • 打开cmd命令行,输入(将logpath 和dbpath 改成自己的):
        mongod --logpath "F:\MongoDB\logs.log" --dbpath "F:\MongoDB\data\db" --install
      • 注册完成,便可通过输入:
        net start mongodb
        便可启动服务。
  • 在命令行输入mongo之后便可以打开shell对MongoDB进行操作啦~

基本概念

SQL概念 MongoDB概念 说明
database database 数据库
table collection 数据库表/集合
row document 数据行/文档
column field 数据字段列/域

文档:文档是有序的,大小写敏感的。键不能包含"\0",这个字符用于标记键的结尾;"."、"$"、"_"保留,建议不要使用在键中。文档的数据结构和JSON基本一样,所有存在集合中的数据都是BSON格式。

基本操作

  • 创建/删除数据库
    show dbs查看所有数据库
    use DATABASE_NAME创建数据库,若不存在则新建,否则进入此数据库
    db.dropDatabase()删除当前数据库

  • 集合
    show collections查看所有集合
    db.createCollection(name, options) 创建集合。options参数是可选的,如autoIndexId 参数,如果为true,则在_id字段上自动创建索引,默认值为false。
    例子:db.createCollection("mytest", { autoIndexId : true})
    db.COLLECTION_NAME.drop() 删除集合

  • 插入文档
    insert()或save()方法
    db.COLLECTION_NAME.insert(document)
    例如:

     db.mytest.insert({
      name: 'Bob',
      score: 100
    })
    
  • 查询文档
    db.COLLECTION_NAME.find() 相当于SQL中的select * from tabe
    db.COLLECTION_NAME.find().pretty()以易读方式展现
    条件语句和操作符:
    | 操作 | 格式 | 示例 | 说明 |
    |------------- |---------------- |--------------- |-------------- |
    |等于 | {<key>:<value>} | db.mytest.find({"score":100}) | 从mytest集合中找到score等于100的文档 |
    |小于 | {<key>:{$lt:<value>}} | db.mytest.find({"score":{$lt:100}}) | 从mytest集合中找到score小于100的文档 |
    |小于或等于 | {<key>:{$lte:<value>}} | db.mytest.find({"score":{$lte:100}}) | 从mytest集合中找到score小于或等于100的文档 |
    |大于 |{<key>:{$gt:<value>}} | db.mytest.find({"score":{$gt:100}}) | 从mytest集合中找到score大于100的文档 |
    |大于或等于 | {<key>:{$gte:<value>}} |db.mytest.find({"score":{$gte:100}}) | 从mytest集合中找到score大于或等于100的文档 |
    |不等于 |{<key>:{$ne:<value>}} |db.mytest.find({"score":{$ne:100}}) | 从mytest集合中找到score不等于100的文档 |
    条件组合:
    AND:以逗号隔开
    db.mytest.find({"score":{$gte:100}, "name":"Bob"})
    OR:使用关键字"$or"
    db.mytest.find({$or:[{"score":{$gte:100}},{"name": "Tom"}]}).pretty()

  • 更新文档

    • update()方法
      db.COLLECTION_NAME.update( <query>, update的查询条件 <update>, update的更新对象等,类似sql update查询内set后面的 { upsert: <boolean>, 可选,不存在update的记录,是否新插入,默认是false,不插入 multi: <boolean>, 可选,默认是false,只更新找到的第一条记录 writeConcern: <document> 可选,抛出异常的级别 } )
      例子:将名字为Bob的记录更改为Jack,更新多条
      db.mytest.update({'name':'Bob'},{$set:{'name':'Jack'}},{multi:true})
  • save()方法:通过传入的文档来替换已有文档
    db.COLLECTION_NAME.save( <document>, 文档数据 { writeConcern: <document> 可选,抛出异常的级别 } )
    例子:替换 _id 为 56064f89ade2f21f36b04236 的文档数据
    db.mytest.save({ "_id" : ObjectId("5a5f103d1fa359a981d5ec90"), "name" : "Marry", "score" : 100 })
  • 删除文档
    db.COLLECTION_NAME.remove( <query>, 可选,删除的文档的条件。若无,则删除全部文档 { justOne: <boolean>, 可选,设为 true 或 1,则只删除一个文档 writeConcern: <document> 可选,抛出异常的级别 } )
    例子:删除名字为Tom的文档
    db.mytest.remove({"name":"Marry"})

练习:

use mydb  #创建数据库
show dbs  #查询所有数据库
db.createCollection("mytest", { autoIndexId : true}) #创建集合mytest
show collections  #查询所有集合
#插入数据
db.mytest.insert({
      name: 'Bob',
      score: 100
      })
db.mytest.insert({
      name: 'Tom',
      score: 96
      })
db.mytest.find({"score":100}) #查询mytest中score为100的记录
db.mytest.find({"score":{$lt:100}})
db.mytest.find({$or:[{"score":{$gte:100}},{"name": "Tom"}]}).pretty()
db.mytest.update({'name':'Bob'},{$set:{'name':'Jack'}},{multi:true})
db.mytest.find() #查询mytest中所有记录
#将_id为5a5f103d1fa359a981d5ec90的数据替换
db.mytest.save({
    "_id" : ObjectId("5a5f103d1fa359a981d5ec90"),
    "name" : "Marry",
    "score" :  100
})
db.mytest.remove({"name":"Marry"})  #删除mytest中名字为Marry的记录
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容