MongoDB入门

MongoDB入门

一丶MongoDB简介

​ MongoDB 是一个跨平台的,面向文档的数据库,是当前 NoSQL 数据库产品中最热门的一种。它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的产品。它支持的数据结构非常松散,是类似JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

​ MongoDB 的官方网站地址是:http://www.mongodb.org/

二丶MongoDB特点

​ 其最大特点是支持的查询语言非常强大,语法类似面向对象查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引,是一个面向集合,模式自由的文档型数据库.特点总结如下:

  • (1)面向集合存储,易于存储对象类型的数据
  • (2)模式自由
  • (3)支持动态查询
  • (4)支持完全索引,包含内部对象
  • (5)支持复制和故障恢复
  • (6)使用高效的二进制数据存储,包括大型对象(如视频等)
  • (7)自动处理碎片,以支持云计算层次的扩展性
  • (8)支持 Python,PHP,Ruby,Java,C,C#,Javascript,Perl 及 C++语言的驱动程序,社区中也提供了 对 Erlang 及.NET 等平台的驱动程序
  • (9) 文件存储格式为 BSON(一种 JSON 的扩展)

三丶MongoDB的体系结构

​ MongoDB 的逻辑结构是一种层次结构。主要由:文档(document)、集合(collection)、数据库(database)这三部分组成的。逻辑结构是面向用户的,用户使用 MongoDB 开发应用程序使用的就是逻辑结构。

  • (1)MongoDB 的文档(document),相当于关系数据库中的一行记录。
  • (2)多个文档组成一个集合(collection),相当于关系数据库的表。
  • (3)多个集合(collection),逻辑上组织在一起,就是数据库(database)。
  • (4)一个 MongoDB 实例支持多个数据库(database)。

文档(document)、集合(collection)、数据库(database)的层次结构如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LJfGMGzS-1583142573537)(C:\Users\86132\AppData\Roaming\Typora\typora-user-images\image-20200228182418419.png)]

四丶MongoDB与MySQL数据库逻辑结构概念的对比

MongoDb关系型数据库Mysql
数据库(databases)数据库(databases)
集合(collections)表(table)
文档(document)行(row)

五丶安装与下载

安装包:[mongodb-win32-x86_64-2008plus-ssl-3.2.10-signed.msi]

六丶启动服务(可配置环境变量)

  • 首先在本机创建一个用于存放数据的目录:md data\db
  • 启动服务:mongod --dbpath=d:\data\db,dbpath参数用于指定数据存储目录
  • 如果不是默认端口27017,我们可以通过命令来修改端口
    • mongod --port 12306 --datapath d:\data\db

七丶登录系统

  • 如果mongoDB是部署在本机,且按默认端口启动的,则直接输入mongo,便可以登录系统,默认连接的是test测试库
  • 如果连接远程的mongoDB服务器,使用命令:mongo 远程IP
  • 如果远程mongoDB的服务端口不是默认的,应该指定端口:mongo 远程ip:端口
  • exit可以退出

八丶基本增删改查操作

  • 使用数据库:use 数据库名 ,如果该数据库不存在会自动创建
  • 插入文档,文档相当于关系数据库中的记录
    • 定义一个文档变量,格式为:变量名称={},eg:r={name:‘娃哈哈’,age:22};
    • 将变量存入MongoDB,db.集合名称.save(),eg:db.student.save®;集合相当于数据库中的表,student不存在会自动创建.
    • 也可以把变量直接放入save参数中,eg:db.student.save({name:“沙和尚”,sex:“男”},在插入时会自动生成ObjectId,也可以手动插入_id;
  • 查询结合:db.集合名称,find();查询集合中所有文档
    • 条件查询:db.集合名称.find(参数),参数为json格式,eg:db.student.find({sex:‘女’})
    • 返回符合条件的第一条数据:db.student.findOne(参数)
    • 返回前几条数据:sb.集合名称.find().limit(条数);
  • 修改文档
    • update修改:db.集合名称.update({条件参数},{修改字段参数}),在操作之后会发现只剩下_id和修改字段
    • mongodb提供了修改其KaTeX parse error: Expected '}', got 'EOF' at end of input: …update({条件参数},{set:{修改参数}}),字段都保留也修改成功
  • 删除文档
    • db.集合名称.remove(条件),eg:db.student.remove({name:‘猪八戒’})

九丶高级查询

  • 模糊查询

    • 格式为/模糊查询字符串/,eg:查询address中带洞的文档
      • db.student,find({address:/洞/})
    • 以指定条件开头,格式/^条件/,eg:
      • db.student.find({name:/^白/})
  • null值处理

    • 将查询条件值改为null就可以查询出来,eg:
      • db.student.find({address:null})
    • 注:该查询会查询出该字段为null值的以及不存在该字段的文档记录
  • 大于小于不等于

    • db.collection.find({ “field” : { $gt: value } } ); // 大于: field > value
    • db.collection.find({ “field” : { $lt: value } } ); // 小于: field < value
    • db.collection.find({ “field” : { $gte: value } } ); // 大于等于: field >= value
    • db.collection.find({ “field” : { $lte: value } } ); // 小于等于: field <= value
    • db.collection.find({ “field” : { $ne: value } } ); //不等于
      • eg:查询年龄大于20的学生:db.student.find({age:{$gt:20}})
  • 是否存在,$exists操作符,eg:查询所有包含address字段的数

    • db.student.find({address:{$exists:true}})//存在该字段
    • db.student.find({address:{$exists:falst}})//不存在该字段
  • 包含于不包含:$in和nin;eg年龄包含在20,30,和不包含20,30

    • db.studen.find({age:{$in:[20,30]}})
    • db.studen.find({age:{$nin:[20,30]}})
  • 统计记录条数count()

    • db.student.count()查询文档条数
    • db.student.count({age:{$lt:20}});//年龄小于20的文档条数
  • 条件连接,并且,当查询时要满足两个以上条件,使用$and操作符进行关联,格式为:

    • $and:[{},{},{}]
      • db.student.find(KaTeX parse error: Expected '}', got 'EOF' at end of input: and:[{age:{gt:20}},{age:{$lt:30}}])//大于20小于30的学生
  • 条件连接,或者$or,用法和并且一直
    $and:[{},{},{}]

    • db.student.find(KaTeX parse error: Expected '}', got 'EOF' at end of input: and:[{age:{gt:20}},{age:{$lt:30}}])//大于20小于30的学生
  • 条件连接,或者$or,用法和并且一直

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值