Scala连接mongodb数据库

来源:互联网 发布:淘宝女士小包包 编辑:程序博客网 时间:2024/05/18 02:50

mongodb是一种面向文档的数据库,Scala是一种函数式编程语言,由于项目的关系,需要使用Scala连接mongodb数据库。下面介绍具体的方法。

就像Java连接MySQL数据库需要JDBC一样,Scala连接mongodb数据库也需要一种中间件,这里使用casbah,这里给出了casbah的一些指导。

使用casbah需要下载casbah的jar包,由于已经在Intellij Idea搭建Spark开发环境中介绍了使用Idea+maven的搭建,这里不需要手动下载,使用maven的包管理工具自动加载说需要的依赖即可,其中,具体地依赖信息如下:

<dependency>        <groupID>org.mongodb</groupID>        <artifactID>casbah-core_2.10</artifactID>        <version>3.1.1</version></dependency>

其中version对应使用的版本号。这样,maven就会自动下载所需要的依赖了。

在Scala程序中,要想使用casbah里面的类,需要添加如下的import:

import com.mongodb.casbah.Imports._

首先,需要连接数据库。在安装mongodb的时候,默认的是使用的27017端口,下面是一些连接mongodb数据库的实例:

// 链接到默认主机(localhost)和默认端口号(27017)val mongoClient =  MongoClient()// 连接到给定的主机“mongodb01”,使用默认的端口号27017val mongoClient =  MongoClient("mongodb01")// 连接到给定的主机“mongodb02”,并使用给定的端口号42017val mongoClient =  MongoClient("mongodb02", 42017)

还可以使用MongoDB URL连接数据库:

val uri = MongoClientURI("mongodb://localhost:27017/")val mongoClient =  MongoClient(uri)

连接到数据库后,就可以获得具体的数据库(db)和集合(collection)了。使用下面的代码可以获得指定的数据库:

val db = mongoClient("test")

这样就获得了“test”这个数据库。然后就可以通过这个数据库获得集合:

val coll = db("casbah")

获得了“casbah”这个集合。如果数据库中没有这个集合,mongodb会创建这个集合。

得到集合后,就可以对这个集合进行增删改查的操作了。casbah中使用MongoDBObject来创建一个文档:

val a=MongoDBObject("x"->1)val b=MongoDBObject("x"->2)

这样就创建了两个文档。casbah中对集合的操作就像在mongodb的交互式脚本中对集合的操作一样,比如使用insert进行插入操作:

coll.insert( a )coll.insert( b )

这样就将刚才创建的两个文档插入数据库中了。

同样可以使用count和find进行读取:

val n=coll.count()val allDocs=coll.find()

下面是一个简单的例子:

package com.liu/**  * Created by hadoop on 16-4-1.  */import com.mongodb.casbah.Imports._object CasbahDemo {  def main(args:Array[String]): Unit ={    val mongoClient=MongoClient("localhost",27017)    val db=mongoClient("test")    val coll=db("casbah")    val a=MongoDBObject("x"->1)    val b=MongoDBObject("x"->2)    coll.insert(a)    coll.insert(b)    val allDocs=coll.find()    allDocs.foreach(println)  }}

这段代码仅仅是上面介绍的罗列。运行结果如下:


同时,在一个终端连接到mongodb,使用交互式脚本进行查询,结果如下:


可见,Scala中操纵mongodb已经成功了。

下面介绍Scala操纵mongodb的删改操作。

就像交互式脚本一样,casbah也可以使用文档作为查询条件,比如这样:

val c=MongoDBObject("x"->2)val d=coll.find(c)
同理,对于修改操作,也是这样:

val e=MongoDBObject("x"->3)coll.update(a,e)
第一个参数是查询条件,第二个参数是更新的文档,这样,原来的a就编程现在的e了。

在mongodb中,使用$set表示只进行更新操作,而不替换原来的内容。在casbah中,也可以使用$set:

val f=$set("y"->1)coll.update(e,f)
这样,就将原来的{"x":3}变为现在的{"x":3,"y":1}。

对于删除操作也是同理:

coll.remove(f)
就会删除符合f这个条件的文档。

1 0
原创粉丝点击