Mongo DB教程及SQL与Mongo DB查询的映射

目录

介绍

在机器上设置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-SQLNo-SQL代表Not Only SQLNo-SQL是非关系型数据库。No-SQL数据库不遵循RDMS规则,No-SQL数据库不使用SQL查询数据。

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

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

MongoDB属于文档存储数据库。

文档存储数据库:在文档存储数据库中,数据以文档的形式存储。它扩展了键值存储数据库概念。

Mongo DBCouch DB是两个主要的文档存储数据库。Mongo DB以文档的形式存储数据。这是示例文档的示例。

在机器上设置Mongo DB

从下面的MongoDB官方站点下载MongoDB(根据您的操作系统下载MSI文件)。

安装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),为MongoDBmongo shell提供支持。这意味着您可以在Robomongo重用您现有的MongoDB Shell技能。

我们可以从名为Robomongo.orgRobomongo原始站点下载Robomongo。这是网址:

下载后,运行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. MongoDBJson格式存储数据(我们称之为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" ]}
Namecity是字典,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 ServerMongoDB中插入更多记录(附加SQL脚本和MongoDB脚本)

运行脚本后,我们在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的所有记录。会有一个_id9它会更新phoneNo Address,否则它会插入一个新文档  _id 9

Multi

假设我们执行以下查询:

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

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

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 Test
	TO DISK = 'C:\Vijay\Test.Bak'
	WITH FORMAT,
	MEDIANAME = 'Z_SQLServerBackups',
	NAME = 'Full Backup of Test Database';

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

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包含实际的函数定义。

例如,假设我们要创建一个函数,它接受两个名为firstnamelastname的参数并返回全名。

db.system.js.save
(
   {
     _id: "FullName",
     value : function(FirstName,LastName) { return FirstName + ' ' + LastName; }
   }
)

为了调用这个函数,我们需要先加载服务器脚本,然后我们可以调用这个函数,如下所示:

db.loadServerScripts();
FullName('Vijay','Rana')

当我们调用这个函数时,结果是Vijay Rana

MongoDB中的自动递增IDSQL Server中的标识)

MongoDB中,_id用作主键。如果我们不在_id字段中插入任何值,那么MongoDB会自动在此列中插入一个唯一的十六进制值。但是如果我们想在这个字段中输入自增整数值(如SQL Server中的IdentityOracle中的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 ServerIdentity 列)中那样生成自动增量ID,我们将看到.NETMongoDB的连接。

https://www.codeproject.com/Articles/1087008/Mongo-DB-Tutorial-and-Mapping-of-SQL-and-Mongo-DB

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值