博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongoDB学习记录
阅读量:6265 次
发布时间:2019-06-22

本文共 4157 字,大约阅读时间需要 13 分钟。

hot3.png

基础术语

NoSQL Not only SQL

**集合(collection)**类似关系型数据库中的的概念

**文档(document)**类似关系型数据库中的的概念

**域(field)**类似

**索引(index)**与关系型数据库的一样

安装

  1. 下载,并解压
  2. 设置环境变量

启动

  1. 启动mongod守护进程,至少要指定数据存储位置

    mongod --dbpath /db/data

    默认端口:27017,启动时通过--port设置

  2. 启动mongo客户端,安装里自带了一个shell client。

    mongo

增删改查

mongodb的增删改查是通过mongodb的内置对象的函数来实现。

  1. db.unicorns.insert({name: 'Horny', dob: new Date(1992,2,13,7,47), loves: ['carrot','papaya'], weight: 600, gender: 'm', vampires: 63}); //这些是测试使用的数据 db.unicorns.insert({name: 'Aurora', dob: new Date(1991, 0, 24, 13, 0), loves: ['carrot', 'grape'], weight: 450, gender: 'f', vampires: 43}); db.unicorns.insert({name: 'Unicrom', dob: new Date(1973, 1, 9, 22, 10), loves: ['energon', 'redbull'], weight: 984, gender: 'm', vampires: 182}); db.unicorns.insert({name: 'Roooooodles', dob: new Date(1979, 7, 18, 18, 44), loves: ['apple'], weight: 575, gender: 'm', vampires: 99}); db.unicorns.insert({name: 'Solnara', dob: new Date(1985, 6, 4, 2, 1), loves:['apple', 'carrot', 'chocolate'], weight:550, gender:'f', vampires:80}); db.unicorns.insert({name:'Ayna', dob: new Date(1998, 2, 7, 8, 30), loves: ['strawberry', 'lemon'], weight: 733, gender: 'f', vampires: 40}); db.unicorns.insert({name:'Kenny', dob: new Date(1997, 6, 1, 10, 42), loves: ['grape', 'lemon'], weight: 690,  gender: 'm', vampires: 39}); db.unicorns.insert({name: 'Raleigh', dob: new Date(2005, 4, 3, 0, 57), loves: ['apple', 'sugar'], weight: 421, gender: 'm', vampires: 2}); db.unicorns.insert({name: 'Leia', dob: new Date(2001, 9, 8, 14, 53), loves: ['apple', 'watermelon'], weight: 601, gender: 'f', vampires: 33}); db.unicorns.insert({name: 'Pilot', dob: new Date(1997, 2, 1, 5, 3), loves: ['apple', 'watermelon'], weight: 650, gender: 'm', vampires: 54}); db.unicorns.insert({name: 'Nimue', dob: new Date(1999, 11, 20, 16, 15), loves: ['grape', 'carrot'], weight: 540, gender: 'f'}); db.unicorns.insert({name: 'Dunx', dob: new Date(1976, 6, 18, 18, 18), loves: ['grape', 'watermelon'], weight: 704, gender: 'm', vampires: 165});

    如果当前数据库没有unicorns这个集合,那么mongodb会自动创建,插入的数据是以二进制的串行JSON格式存储。默认情况,mongodb会自动创建一个_id域,类型为OjbectID。

  2. db.unicorns.find({gender: 'm', weight: {$gt: 700}})
    • $lt 小于

    • $lte 小于或等于

    • $gt 大于

    • $gte 大于或等于

    • $ne 不等于

    • $or

      db.unicorns.find({gender: 'f', $or: [{loves: 'apple'}, {loves: 'orange'}, {weight: {$lt: 500}}]})  //根据ObjectID查  db.unicorns.find({_id: ObjectId("TheObjectId")})

    统计数量使用count

    db.unicorns.count({gender: 'm', weight: {$gt: 700}})

    是否存在某个域:

    db.unicorns.find({vampires: {$exists: false}})
  3. 删,使用remove

    db.unicorns.remove({gender: 'm', weight: {$gt: 700}})
  4. 改,update

    注意:mongodb的update与关系型数据的update有些不一样

    • 找到{name: 'Roooooodles'}的文档,然后使用{weight: 590}替换整个文档

      db.unicorns.update({name: 'Roooooodles'}, {weight: 590})
    • 重设某个文档的某个域的值

      db.unicorns.update({name: 'Roooooodles'}, {$set: {weight: 590}})
    • 对一个域的值进行增值或负值

      db.unicorns.update({name: 'Pilot'}, {$inc: {vampires: -2}})
    • 向一个为数组的域增值

      db.unicorns.update({name: 'Aurora'}, {$push: {loves: 'sugar'}})
    • Upsert,根据是否存在值来决定是插入还是更新。方法是设置update的第三个参数为true。你可以尝试:

      db.hits.update({page: 'unicorns'}, {$inc: {hits: 1}});  db.hits.find();  db.hits.update({page: 'unicorns'}, {$inc: {hits: 1}, true});  db.hits.find();  db.hits.update({page: 'unicorns'}, {$inc: {hits: 1}}, true);  db.hits.find();
    • update 默认只更新符合条件的第一条文档,update第四个参数用于设置是否批量更新

      db.unicorns.update({}, {$set: {vaccinated: true }}, false, true);

    update函数完全参数列表:

    | 参数 | 类型 | 说明 | | ------ | ------ | ----- | | 查询条件 | document | 需要更新哪些文档 | 更新说明 | document| 怎样更新 | upsert | boolean | 是否启用upsert,默认为false | 批量 | boolean | 是否启用批量更新,默认为false |writeConcern| document | 可选,2.6新增,A document expressing the write concern. Omit to use the default write concern. See Safe Writes.|

    目前,本人不了解writeConcern

查询小进阶

  • 域的选择

    db.unicorns.find(null, {name:1,_id:0});

    find的第二个参数用于设置选择域或排除某些域的查询,除了上面排除_id域的情况外,参数中不可以同时包含选择域和排除。

    name:1中的数值,0代表排除,非0代表选择域。

  • 排序

    db.unicorns.find().sort({weight: -1})  db.unicorns.find().sort({name: 1, vampires: -1})

    1代表升序,-1代表降序,除此,不接受其它数字。注意:mongodb是限制排序对象大小的。

  • 分页

    db.unicorns.find().sort({weight: -1}).limit(2).skip(1)
  • 计数

    db.unicorns.count({vampires: {$gt: 50}})  db.unicorns.find({vampires: {$gt: 50}}).count()

资料

  • 推荐根据文档中来练习

转载于:https://my.oschina.net/zjzhai/blog/276566

你可能感兴趣的文章
闲扯下午引爆乌云社区“盗窃”乌云币事件
查看>>
原生js轮盘抽奖实例分析(幸运大转盘抽奖)
查看>>
知否?知否?情人眼里出代码
查看>>
DataBinding数据绑定基本讲解
查看>>
15 分钟无门槛构建服务器性能监控系统
查看>>
【JS第19期】设计模式-简单工厂模式
查看>>
Flask之旅: 快速上手
查看>>
Android图片加载开源库深度推荐,安利Fresco
查看>>
聊聊flink的MemoryPool
查看>>
聊聊flink KeyedStream的KeySelector
查看>>
spring mvc如何计算BEST_MATCHING_PATTERN_ATTRIBUTE
查看>>
swift 消息监听和键值监听(kvo)
查看>>
02@在类的头文件中尽量少引入其他头文件
查看>>
Spring定时任务高级使用篇
查看>>
阿里资深技术专家总结:要怎样努力才可以成为公司主力架构师
查看>>
数学推导+Python实现机器学习算法:线性回归
查看>>
Android AccessibilityService机制源码解析
查看>>
Android基础知识
查看>>
寻找数组主元素(Majority Element))
查看>>
如何将ST05生成的trace导入HANA Studio里并以图形化方式显示出来
查看>>