2.7使用Groovy查询MongoDB

2.7使用Groovy查询MongoDB

         基于文档或NoSQL数据库的简单性和可扩展性使其非常流行。NoSQL数据库最受欢迎之一是MongoDB(http://www.mongodb.org/)。在该部分,将学习到如何使用Groovy TestStep调用MongoDB的API进行查询。

         TIP:MongoDB作为服务端后端

         由于MongoDB使用(BinaryJSON)或BSON格式将数据存储为文档。因此在需要JSON数据时,可以方便地将其用作服务或模拟后端

2.7.1 准备阶段

   如果还没有安装MongoDB,可以在MongoDB官网可以找到安装介绍。MongoDB的官网地址:https://docs.mongodb.com/manual/installation/。假设MongoDB运行的服务为localhost、端口为27017。默认情况下,不需要认证; 这将在这部分中被假定。

     可以使使用MongoDB的java驱动,连接MongoDB。但是,Groovy用户可以选择GMongo,这很好地简化了API。

   GMongo:是标准MongoDB驱动程序的一个方便的Groovy包装器。标准的驱动仍然需要,可以看:https://github.com/poiati/gmongo。在使用GMongo之前,需要下载JAR文件,把JAR文件添加到SoapUI的lib/ext中。可以在Maven中心找到JAR文件:

http://www.java2s.com/Code/Jar/g/Downloadgmongo12sourcesjar.htm

http://mvnrepository.com/artifact/org.mongodb/mongo-java-driver

http://mvnrepository.com/artifact/com.gmongo/gmongo

本章使用版本是:driver:3.2.2,gmongo:1.2;添加jar文件到SoapUI安装路径下的:/bin/ext,本机截图如下:


在原书给出的实例:Chapter2例子中有完整的SoapUI项目:GroovyMongoDB-soapui-project.xml。

关于mongodb的使用教程可以看:http://www.runoob.com/mongodb/mongodb-window-install.html

 

2.7.2 操作步骤

         我们将使用一个GroovyTestStep调用GMongo API运行例子的查询。首先,使用MongoDB创建一些测试文档,然后我们可以插入一个查询、更新和删除的例子。执行步骤如下:

一、首先,在名为test的数据库中创建几个MongoDB文档。创建一个GroovyTestStep输入如下信息:

代码:

import com.gmongo.GMongo

def mongo = new GMongo()

def db = mongo.getDB('test')

db.invoices << [id: 'inv1', company: 'test company1', amount:'100.00']

db.invoices << [id: 'inv2', company: 'test company2',amount: '200.00']

注意:

在运行脚本之前,创建一个可以连接到本地安装MongoDB的GMongo实例。host=localhost或者127.0.0.1,port=27017。

如果test数据库存在则使用该数据库,不存在则创建test数据库。

插入两个新的invoice文档到新的或者已经存在的集合invoices中。

二、下一步,如何从数据库中查询invoice文档。这里有许多方法操作:

n  创建一个新的GroovyTestStep并添加连接数据库代码,在步骤一有连接数据库的代码

n  这时,连接代码后面添加如下语句:

//获取一条invoice对象

log.info db.invoices.findOne()

n  运行脚本就会看到如下图的输出结果:

三、其他类型的查询语句代码与操作截图如下:

代码:

import com.gmongo.GMongo
def mongo = new GMongo()
def db = mongo.getDB('invoicesDb')
//Get a single invoice object
log.info db.invoices.findOne()

//Get a single invoice document with id=inv2
log.info db.invoices.findOne(id: 'inv3')

//Get a single invoice document, excluding the object id (_id)
db.invoices.findOne([:],[_id: 0])

//To iterate over all invoice documents
db.invoices.find().each{invoice->
log.info invoice
}

四、更新文档的语句及操作截图如下:

代码:

import com.gmongo.GMongo
def mongo = new GMongo()
def db = mongo.getDB('test')

//Get a single invoice document with id=inv2
log.info db.invoices.findOne(id: 'inv2')

//Update invoice object with id=inv2 setting amount=500
db.invoices.update([id: 'inv2'], [$set: [amount: '500']])

//Update invoice object with id=inv2 setting amount=500
db.invoices.update([id: 'inv2'], [$set: [amount: '800',company:"test company"]])

//Get a single invoice document with id=inv2
log.info db.invoices.findOne(id: 'inv2')

五、删除数据的语句及操作截图如下:

代码:

import com.gmongo.GMongo
def mongo = new GMongo()
def db = mongo.getDB('test')

//Get a single invoice document with id=inv1
log.info db.invoices.findOne(id: 'inv3')

//Delete invoice ibject with id=inv1
db.invoices.remove([id: 'inv3'])

//Get  All invoices
log.info db.invoices.find([:])
//Delete ALL invoices
db.invoices.remove([:])
//Get  All invoices
log.info db.invoices.find([:])

2.7.3 工作原理

         这个例子可能很简单以及有限。GMongo封装提供了默认的连接细节以及允许用户只关注查询mongo。这里对于重点和配置很少,没有涉及连接的管理,例如,连接使用后关闭连接。如果需要连接一个不同的服务和端口,使用如下构造器能很容易做到:   

  defmongo = new GMongo('localhost:27017')

         mongo查询语句的使用是相当有趣、有用的。在本章已经告诉如何创建一个数据库与数据集,不用因为通过查询引用他们而大惊小怪。

TIPS: MongoDB语法VS GMongo语法

         当查阅MongoDB命令时,GMongo或Groovy需要依据标准MongoDB语法更改Groovy语言,使其与标准MongoDB语法有相同的功能。例如:MongoDB从查血结果中中排除Mongo对象(_id)的命令语法是:db.invoices.findOne({},{_id:0}),但是在使用GMongo时,你需要修改成这样:db.invoices.findOne([:],[_id: 0])。换句话说,MongoDB语法是使用花括号{},GMongo是使用方括号[]。MongoDB使用{}表示空的Map,GMongo或者Groovy使用[:]表示空的Map。

认证

         如果你需要认证授权才能连接MongoDB,可以考虑使用GMongo客户端类:com.gmongo.GMongoClient来获取连接。详细信息:https://github.com/poiati/gmongo

       如果想将大量测试数据分别加载到SoapUI的集合中,这时可以查看安装bin目录中的Mongo shell命令mongoimport。

mongoimport:https://docs.mongodb.com/manual/reference/program/mongoimport/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值