目录

介绍

在机器上设置Mongo DB

启动Mongo DB

下载RoboMongo

MongoDB术语

MongoDB的要点

查询时间到了

MongoDB函数

MongoDB中的自动递增ID(SQL Server中的标识)

第1步

第2步

第3步

第4步


​​​​​​​

介绍

欢迎来到MongoDB教程。这是MongoDB文章系列的第一部分。

以下是所有三个部分的链接:

  1. Mongo DB教程及SQL与Mongo DB查询的映射
  2. MongoDB 教程 - 第 2 天
  3. MongoDB 教程 - 第 3 天(性能 - 索引)

在第一部分中,由于我们是MongoDB 和No-SQL的新手,我想从No-SQL的定义开始。

No-SQL:No-SQL代表Not Only SQL。No-SQL是非关系型数据库。No-SQL数据库不遵循RDMS规则,No-SQL数据库不使用SQL查询数据。

No-SQL数据库可以分为四类:

  1. 文件存储
  2. 图存储
  3. 列值存储
  4. 键值存储

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盘,我们现在有两个文件夹:

  1. MongoDB(从安装位置复制)
  2. 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的要点

  1. MongoDB以Json格式存储数据(我们称之为BSON(Binary JSON))
  2. JSON代表JavaScript Object Notations,看起来像{“Name”:”Vijay”}
  3. JSON文档将数据存储在键值对中,如{“X”:1,”Y”:2,”Z”:3}
  4. JSON中有两种基本结构:
    1. 数组:事物列表在项目列表中表示[……..]
    2. 字典:关联地图{key:Value}

例如{Name : 'Vijay',City : 'Shamli',interest : ["Sports" ,"Music" ]}
Name和city是字典,Interest是一个数组。

  1. Mongo DbSchema lessSchema Less意味着两个文档不需要是相同的schema
    集合中的第一个文档可以是:{Name:"Vijay",Email:"VijayRana1091@gmail.com"}
    同一集合中的第二个文档可以是:{Name:"Vijay",Email:"VijayRana1091@gmail.com",Address:“Delhi”}
  2. MongoDB不支持jion
  3. Mongo DB不支持事务。

查询时间到了

我们将在这里看到一些我们每天在SQL Server中运行的查询以及在Mongo DB中的等效查询。

为此,我在SQL Server中创建了一个具有以下架构的表,并在MongoDB中创建了一个相同的集合(记住表是MongoDB中的一个集合)。

我们将在MongoDB中创建相同的表,并使用MongoDB对该表进行不同的操作。

操作

SQL

MongoDB

选择数据库

使用测试

使用测试

我们将收到一条消息“切换到db测试”。

插入记录

Insert into Student Values_
(1,'Vijay', 'VijayRana1091@gmail.com', _
'9711965544','Delhi')
db.Student.insert(_
{"_id":1,"Name":"Vijay",_
"Email":"VijayRana1091@gmail.com",
"PhoneNo":"9711965544",_
"Address":"Delhi"}
)

注意:在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 Name='Vijay'
db.Student.find({Name:"Vijay"})

大于和小于

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

select * from Student_where Name ='Vijay'_and phoneNo='9711965544'

Or

select * from Student_where Name ='Vijay'_or phoneNo='9711997119'

And

db.Student.find_({$and :[{Name :'Vijay'},_{PhoneNo : '9711965544'}]})

Or

db.Student.find_({$or:[{Name :'Vijay'},_{PhoneNo : '9711997119'}]})

in

select * from Student where id in(1,3,5)
db.Student.find({_id:{$in:[1,3,5]}})

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

update student set phoneNo='2222222222',_Address='USA' where ID=4
db.Student.update({_id:4},_{$set:{PhoneNo:'2222222222',_Address:'USA'}})

插入:

db.Student.update({_id:9},_{$set:{PhoneNo:'2222222222',_Address:'USA'}},{upsert:true})

上面的查询将搜索一个文档_id是 9的所有记录。会有一个_id和9,它会更新phoneNo和 Address,否则它会插入一个新文档 , _id是 9。

Multi

假设我们执行以下查询:

db.Student.update({Name:"Vijay"},_{$set:{PhoneNo:'2222222222',_Address:'USA'}})

它只会更新一条记录(只记住第一个Match名字是“Vijay”)。但是如果我们想更新Name是“Vijay”的所有记录,那么我们也将传递多参数

db.Student.update({Name:"Vijay"},_{$set:{PhoneNo:'2222222222',_Address:'USA'}},_{multi:true})

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

BACKUP DATABASE TestTO DISK = 'C:\Vijay\Test.Bak'WITH FORMAT,MEDIANAME = 'Z_SQLServerBackups',NAME = 'Full Backup of Test Database';

转到命令提示符并运行以下命令(假设您的mongodump exe在bin文件夹内,如果它是不同的位置,则相应地更改此位置)

C:\Program Files\MongoDB\Server\3.0\bin\mongodump --db测试

MongoDB函数

在MongoDB数据库中,我们可以像在SQL Server中一样创建函数。MongoDB为此提供了一个名为System.js的集合。

System.js集合包含两个键:

  1. _id:_id是函数名。
  2. 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查询的映射相关推荐

  1. 如何使用SQL Server链接服务器查询Excel数据

    Linked servers allow SQL Server access to data from a remote data source. A remote data source can b ...

  2. 使用SQL DTS功能实现从DB/2向SQL Server传输数据

    前言] 经过自行测试SQL2000 DTS功能,感觉通过DTS工具从DB/2取数来得很方便.容易实现.现将实施步骤贴出来,以供参考. [环境] IBM AS/400e.OS/400.DB/2. ERP ...

  3. ssis sql_SSIS OLE DB来源:SQL命令与表或视图

    ssis sql 介绍 (Introduction) SQL Server Integration Services provides a wide variety of features that ...

  4. Microsoft OLE DB Provider for SQL Server 错误 ‘80004005‘错误原因和解决方案

    Microsoft OLE DB Provider for SQL Server 错误 '80004005'错误原因和解决方案 方法步骤: 1.在WINSOWS/TEMP目录的安全选项中,添加帐号ev ...

  5. cmstop模板标签通过db标签的sql语句调用文章列表摘要内容

    通过cmstop的content标签无法在列表页面直接调用摘要,需要用到一个专门摘要函数{description($r[contentid])},如果不想用这个函数的话也可通过以下db语句查询arti ...

  6. Android开发教程之--sql语句一、创建/删除表Stringsql=Createtable

    Android开发教程之--sql语句 一.创建/删除表 String sql="Create table "+TABLE_NAME+"("+FIELD_ID+ ...

  7. 学习mongo系列(四) find().pretty() remove() 查询

    一.find() 方法以非结构化的方式来显示所有文档.如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:db.collection_name.find().pretty ...

  8. asp教程连接sql server数据库教程二种方法

    asp教程连接sql server数据库教程二种方法  ,sql server ole db连接方法:,本人链接sql2012已经成功,想可以帮助大家 本教程主要是讲了asp与mssql server ...

  9. Docker安装mongo数据库,navicat联接操作mongo

    一.MongoDB安装 1.查看mongo镜像版本 docker search mongo 选择第一个mongo 2.获取最新版MongoDB镜像 docker pull mogo:latest 3. ...

最新文章

  1. javascript读取XML文档
  2. [恢]hdu 2077
  3. 2015蓝桥杯省赛---java---B---1(三角形面积)
  4. 上传文件ajax,ajax 文件上传
  5. 使用 XML 维护 Selenium 自动化测试脚本 ZT
  6. java 中class相关的问题
  7. Javascript s04
  8. android 百度定位 sdk 3.3demo,BaiduMapApi_Sample_Android_1.3.3\demo无法启动
  9. 常用Git客户端:Tower for Mac
  10. Git 问题:SSL certificate problem: self signed certificate
  11. python管理后台框架_python3 django layui后台管理开源框架分享(码云)
  12. 存在隐患 : 此角色的 日志目录 所在的文件系统的可用空间小于 10.0 吉字节。 /var/log/hive(可用:9.9 吉字节 (28.12%),容量:35.1 吉字节)
  13. 通过ajax异步请求下载文件的方法
  14. 这是一个转型AI的励志故事,从非科班到拿下竞赛一等奖
  15. java之空指针异常处理
  16. 直播界很火的无线领夹麦克风快充方案 Type-C接口 PD快充+无线麦克风可同时进行
  17. 三分钟了解如何准备简历面试
  18. RIP1实验1(实现不同路由器 不同PC机之间的通信)
  19. android8.0桌面快捷方式,Android 8.0 快捷方式Shortcut
  20. 牛客小白月赛16——D 小阳买水果

热门文章

  1. wsdl接口_DEBUG系列四:第三方接口debug
  2. 在搜索框自动输入文本_selenium自动化测试之常见的定位元素
  3. java的string访问某个元素_架构师必懂的——RBAC基于角色的访问权限设计
  4. 7a系列mrcc xilinx_artix-7A200T的输入时钟(50M)管脚接到MRCC的N端了,怎么解决?
  5. 用python程序化交易名单_python程序化交易神器——tushare
  6. 稀缺生物科技美妆海报PSD分层模板,看得见的超前感!
  7. UI素材干货|听说UI设计师更喜欢Sketch
  8. java知识点_JAVA面试必会知识点「mysql部分」
  9. arcengine二次开发 获取当前的坐标系统(C++)
  10. Linux使用cpuset设置CPU独占