Mongo DB教程及SQL与Mongo DB查询的映射
目录
介绍
在机器上设置Mongo DB
启动Mongo DB
下载RoboMongo
MongoDB术语
MongoDB的要点
查询时间到了
MongoDB函数
MongoDB中的自动递增ID(SQL Server中的标识)
第1步
第2步
第3步
第4步
介绍
欢迎来到MongoDB教程。这是MongoDB文章系列的第一部分。
以下是所有三个部分的链接:
- Mongo DB教程及SQL与Mongo DB查询的映射
- MongoDB 教程 - 第 2 天
- MongoDB 教程 - 第 3 天(性能 - 索引)
在第一部分中,由于我们是MongoDB 和No-SQL的新手,我想从No-SQL的定义开始。
No-SQL:No-SQL代表Not Only SQL。No-SQL是非关系型数据库。No-SQL数据库不遵循RDMS规则,No-SQL数据库不使用SQL查询数据。
No-SQL数据库可以分为四类:
- 文件存储
- 图存储
- 列值存储
- 键值存储
MongoDB属于文档存储数据库。
文档存储数据库:在文档存储数据库中,数据以文档的形式存储。它扩展了键值存储数据库概念。
Mongo DB和Couch DB是两个主要的文档存储数据库。Mongo DB以文档的形式存储数据。这是示例文档的示例。
在机器上设置Mongo DB
从下面的MongoDB官方站点下载MongoDB(根据您的操作系统下载MSI文件)。
- https://www.mongodb.org/downloads#production
安装MSI文件(如果是Window操作系统,默认位置是(C:\Program Files\MongoDB)。
复制此文件夹并将其放置在您的C盘或任何其他驱动器中,并在C盘中创建一个名为data的文件夹,并在data文件夹中创建一个名为db的文件夹。
所以在C盘,我们现在有两个文件夹:
- MongoDB(从安装位置复制)
- data/db(在数据文件夹内创建一个名为data的文件夹和一个名为db的文件夹)
启动Mongo DB
转到我们放在c盘的MongoDB文件夹中的bin文件夹。
就我而言,bin文件夹位于MongoDB文件夹内。(它可以在服务器文件夹内,也可以在下面)
C:\Program Files\MongoDB\Server\3.0\bin
并双击Mongod.exe(它将打开命令提示符并启动MongoDB服务器)。
最后一行应该说“等待连接... ”,如下所示,这意味着我们的Mongo DB服务器已成功启动:
下载RoboMongo
RoboMongo。以Shell为中心的跨平台开源MongoDB管理工具(即Admin GUI)。[它] 嵌入了相同的JavaScript引擎(基于Mozilla SpiderMonkey),为MongoDB的mongo shell提供支持。这意味着您可以在Robomongo中重用您现有的MongoDB Shell技能。
我们可以从名为Robomongo.org的Robomongo原始站点下载Robomongo。这是网址:
- https://robomongo.org/
下载后,运行EXE并转到文件-->连接(确保您的mongodb服务器已启动并运行,我们在最后一步通过Mongod.exe运行)
MongoDB术语
在继续之前,我们应该了解MongoDB的术语:
操作 |
在SQL中 |
在MongoDB中 |
Create |
Insert |
Insert |
Read |
Select |
Find |
Update |
Update |
Update |
Delete |
Delete |
Remove |
Table |
Table |
Collection |
Row |
Row |
Document |
MongoDB的要点
- MongoDB以Json格式存储数据(我们称之为BSON(Binary JSON))
- JSON代表JavaScript Object Notations,看起来像{“Name”:”Vijay”}
- JSON文档将数据存储在键值对中,如{“X”:1,”Y”:2,”Z”:3}
- JSON中有两种基本结构:
- 数组:事物列表在项目列表中表示[……..]
- 字典:关联地图{key:Value}
例如{Name : 'Vijay',City : 'Shamli',interest : ["Sports" ,"Music" ]}
Name和city是字典,Interest是一个数组。
- Mongo Db是Schema less,Schema Less意味着两个文档不需要是相同的schema。
集合中的第一个文档可以是:{Name:"Vijay",Email:"VijayRana1091@gmail.com"}
同一集合中的第二个文档可以是:{Name:"Vijay",Email:"VijayRana1091@gmail.com",Address:“Delhi”} - MongoDB不支持jion。
- Mongo DB不支持事务。
查询时间到了
我们将在这里看到一些我们每天在SQL Server中运行的查询以及在Mongo DB中的等效查询。
为此,我在SQL Server中创建了一个具有以下架构的表,并在MongoDB中创建了一个相同的集合(记住表是MongoDB中的一个集合)。
我们将在MongoDB中创建相同的表,并使用MongoDB对该表进行不同的操作。
操作 |
SQL |
MongoDB |
选择数据库 |
使用测试 |
使用测试 |
我们将收到一条消息“切换到db测试”。
插入记录 |
|
|
注意:在MongoDb中_id用作主键。如果我们不会在此列中插入任何值,那么 MongoDB将自动在Table中插入唯一ID。
在SQL Server和MongoDB中插入更多记录(附加SQL脚本和MongoDB脚本)
- 下载源代码 - 597B
运行脚本后,我们在Student表(SQL服务器和MongoDB)数据库中有以下数据。
select |
选择所有列: select * from student 选择几列: select ID,Name from Student |
选择所有列: db.Student.find() 选择几列: db.Student.find({},{"Name":true}) 我们使用find()Method 从表中提取所有记录。 |
Where 子句 |
|
|
大于和小于 |
select * from student where ID>2 select * from student where ID>=2 select * from student where ID<2 select * from student where ID<=2 |
db.Student.find({_id:{$gt:2}}) db.Student.find({_id:{$gte:2}}) db.Student.find({_id:{$lt:2}}) db.Student.find({_id:{$lte:2}}) 我们使用$gt/$gte大于/大于等于和$lt/$lte小于/小于等于 |
Like |
下面的查询将查找Name列中某处存在字母P的所有记录 select * from student where Name like '%P%' 假设我们要查找Name以字母'a'结尾的所有记录 select * from student where Name like '%a' 假设我们要获取Name以字母'P'开头的所有记录 select * from student where Name like 'p%' |
在Mongo DB中,我们使用$regex运算符来检查字母'P'是否存在于Name列的某处。 db.Student.find({Name:{$regex:"P"}}) 下面的查询将获取Name以字母'a'结尾的所有记录 db.Student.find({Name:{$regex:"a$"}}) 下面的查询将获取Name以字母'P'开头的所有记录 db.Student.find({Name:{$regex:"^P"}}) |
And/Or |
And:
Or:
|
And:
Or:
|
in |
|
|
Count/Sort |
计算所有记录: select count(*) from Student 按升序对记录排序: select * from student order by Name 按降序排序: select * from student order by Name desc |
计算所有记录: db.Student.find().count() 按升序对记录排序: db.Student.find().sort({Name:1}) 按降序排序: db.Student.find().sort({Name:-1}) |
Update |
|
插入:
上面的查询将搜索一个文档_id是 9的所有记录。会有一个_id和9,它会更新phoneNo和 Address,否则它会插入一个新文档 , _id是 9。 Multi: 假设我们执行以下查询:
它只会更新一条记录(只记住第一个Match名字是“Vijay”)。但是如果我们想更新Name是“Vijay”的所有记录,那么我们也将传递多参数
|
Delete/Remove/Drop |
删除条件: Delete from student where ID=5 删除所有记录: Delete from Student Drop: drop table Student |
删除条件: db.Student.remove({_id:5}) 删除所有记录: db.Student.remove({}) Drop: db.Student.drop() |
Top |
select Top 2* from Student |
限制: db.Student.find().limit(2) 跳过: db.Student.find().skip(2).limit(2) 顾名思义,skip会跳过文件数和limit会限制记录数。 |
distinct |
select distinct Name from Student |
db.Student.distinct("Name") |
Backup |
|
转到命令提示符并运行以下命令(假设您的mongodump exe在bin文件夹内,如果它是不同的位置,则相应地更改此位置) C:\Program Files\MongoDB\Server\3.0\bin\mongodump --db测试 |
MongoDB函数
在MongoDB数据库中,我们可以像在SQL Server中一样创建函数。MongoDB为此提供了一个名为System.js的集合。
System.js集合包含两个键:
- _id:_id是函数名。
- value:value包含实际的函数定义。
例如,假设我们要创建一个函数,它接受两个名为firstname和lastname的参数并返回全名。
db.system.js.save
({_id: "FullName",value : function(FirstName,LastName) { return FirstName + ' ' + LastName; }}
)
为了调用这个函数,我们需要先加载服务器脚本,然后我们可以调用这个函数,如下所示:
db.loadServerScripts();
FullName('Vijay','Rana')
当我们调用这个函数时,结果是Vijay Rana。
MongoDB中的自动递增ID(SQL Server中的标识)
在MongoDB中,_id用作主键。如果我们不在_id字段中插入任何值,那么MongoDB会自动在此列中插入一个唯一的十六进制值。但是如果我们想在这个字段中输入自增整数值(如SQL Server中的Identity或Oracle中的Sequence),那么没有直接的方法可以这样做。为此,我们需要按照以下步骤操作:
第1步
创建一个集合(在我的例子中是Identity),它将保存计数器:
db.createCollection("Identity") // Identity is my collection Name
第2步
在此集合中插入一个具有初始计数器值的文档:
db.Identity.insert({_id:"incrementID",sequence_value:0})
第3步
创建一个函数,它将增加它的sequence_value并在system.js中添加该函数,如下所示:
db.system.js.save
({_id: "getNextIdentity", value : function getNextIdentity(sequenceName){var sequenceDocument = db.Identity.findAndModify({query:{_id: sequenceName },update: {$inc:{sequence_value:1}},new:true});return sequenceDocument.sequence_value;}}
)
第4步
在插入文档时,我们可以调用这个函数,它会返回一个递增的值,如下所示:
db.Employee.insert({"_id":getNextIdentity("incrementID"),"EmpName":"Vijay","Age":"30"
})
在下一篇文章中,我将讨论MongoDB命令的其余部分。我们将如何像通常在SQL Server(Identity 列)中那样生成自动增量ID,我们将看到.NET与MongoDB的连接。
https://www.codeproject.com/Articles/1087008/Mongo-DB-Tutorial-and-Mapping-of-SQL-and-Mongo-DB
Mongo DB教程及SQL与Mongo DB查询的映射相关推荐
- 如何使用SQL Server链接服务器查询Excel数据
Linked servers allow SQL Server access to data from a remote data source. A remote data source can b ...
- 使用SQL DTS功能实现从DB/2向SQL Server传输数据
前言] 经过自行测试SQL2000 DTS功能,感觉通过DTS工具从DB/2取数来得很方便.容易实现.现将实施步骤贴出来,以供参考. [环境] IBM AS/400e.OS/400.DB/2. ERP ...
- ssis sql_SSIS OLE DB来源:SQL命令与表或视图
ssis sql 介绍 (Introduction) SQL Server Integration Services provides a wide variety of features that ...
- Microsoft OLE DB Provider for SQL Server 错误 ‘80004005‘错误原因和解决方案
Microsoft OLE DB Provider for SQL Server 错误 '80004005'错误原因和解决方案 方法步骤: 1.在WINSOWS/TEMP目录的安全选项中,添加帐号ev ...
- cmstop模板标签通过db标签的sql语句调用文章列表摘要内容
通过cmstop的content标签无法在列表页面直接调用摘要,需要用到一个专门摘要函数{description($r[contentid])},如果不想用这个函数的话也可通过以下db语句查询arti ...
- Android开发教程之--sql语句一、创建/删除表Stringsql=Createtable
Android开发教程之--sql语句 一.创建/删除表 String sql="Create table "+TABLE_NAME+"("+FIELD_ID+ ...
- 学习mongo系列(四) find().pretty() remove() 查询
一.find() 方法以非结构化的方式来显示所有文档.如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:db.collection_name.find().pretty ...
- asp教程连接sql server数据库教程二种方法
asp教程连接sql server数据库教程二种方法 ,sql server ole db连接方法:,本人链接sql2012已经成功,想可以帮助大家 本教程主要是讲了asp与mssql server ...
- Docker安装mongo数据库,navicat联接操作mongo
一.MongoDB安装 1.查看mongo镜像版本 docker search mongo 选择第一个mongo 2.获取最新版MongoDB镜像 docker pull mogo:latest 3. ...
最新文章
- javascript读取XML文档
- [恢]hdu 2077
- 2015蓝桥杯省赛---java---B---1(三角形面积)
- 上传文件ajax,ajax 文件上传
- 使用 XML 维护 Selenium 自动化测试脚本 ZT
- java 中class相关的问题
- Javascript s04
- android 百度定位 sdk 3.3demo,BaiduMapApi_Sample_Android_1.3.3\demo无法启动
- 常用Git客户端:Tower for Mac
- Git 问题:SSL certificate problem: self signed certificate
- python管理后台框架_python3 django layui后台管理开源框架分享(码云)
- 存在隐患 : 此角色的 日志目录 所在的文件系统的可用空间小于 10.0 吉字节。 /var/log/hive(可用:9.9 吉字节 (28.12%),容量:35.1 吉字节)
- 通过ajax异步请求下载文件的方法
- 这是一个转型AI的励志故事,从非科班到拿下竞赛一等奖
- java之空指针异常处理
- 直播界很火的无线领夹麦克风快充方案 Type-C接口 PD快充+无线麦克风可同时进行
- 三分钟了解如何准备简历面试
- RIP1实验1(实现不同路由器 不同PC机之间的通信)
- android8.0桌面快捷方式,Android 8.0 快捷方式Shortcut
- 牛客小白月赛16——D 小阳买水果
热门文章
- wsdl接口_DEBUG系列四:第三方接口debug
- 在搜索框自动输入文本_selenium自动化测试之常见的定位元素
- java的string访问某个元素_架构师必懂的——RBAC基于角色的访问权限设计
- 7a系列mrcc xilinx_artix-7A200T的输入时钟(50M)管脚接到MRCC的N端了,怎么解决?
- 用python程序化交易名单_python程序化交易神器——tushare
- 稀缺生物科技美妆海报PSD分层模板,看得见的超前感!
- UI素材干货|听说UI设计师更喜欢Sketch
- java知识点_JAVA面试必会知识点「mysql部分」
- arcengine二次开发 获取当前的坐标系统(C++)
- Linux使用cpuset设置CPU独占