R语言中的MongoDB的示例分析

技术R语言中的MongoDB的示例分析今天就跟大家聊聊有关R语言中的MongoDB的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。R利剑MongeDB,分

今天就跟大家聊聊有关稀有语言中的MongoDB的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

R利剑MongeDB,分为4个章节。

MongoDB环境准备

rmongodb函数库

rmongodb基本使用操作

rmongodb测试案例

每一章节,都会分为"文字说明部分"和"代码部分",保持文字说明与代码的连贯性。

1. MongoDB环境准备

文字说明部分:

首先环境准备,这里我选择了下载操作系统12.04的32位桌面版本,大家可以根据自己的使用习惯选择顺手的Linux。

MongoDB安装过程跳过。

查看MongoDB服务器环境

使用数据库服务程序命令,启动蒙古数据库。

进程号:pid=2924

端口:端口=27017

数据文件目录:dbpath=/data/db/

软件版本:32位

主机名:host=conan

使用蒙戈命令,打开蒙戈贝壳。

蒙古贝壳的简单操作:

查看数据库,切换数据库,查看数据集。

稀有语言环境2.15.0,WinXP通过远程连接,访问蒙古数据库服务器。

代码部分:

查看操作系统

~ uname -a

Linux柯南3。2 .0-38-通用-PAE # 61-Ubuntu SMP 2月19日星期二12:39:51 UTC 2013 i686 i686 i386 GNU/Linux

~猫/等/问题

Ubuntu 12.04.2 LTS \n \l

启动数据库

~ mongod

蒙哥德-关于帮助和启动选项的帮助

四月11日星期四11:02:26

四月11日星期四11:02:26警告: 32位服务器默认情况下没有启用日志记录。如果你想要耐久性,请使用日记.

四月11日星期四11:02:26

4月11日星期四11:02:26[initandlisten]MongoDB起始: pid=2924端口=27017 dbpath=/data/db/32位主机柯南

四月11日星期四11:023:26[initandlisten]

四月11日星期四11:02:26[initandlisten]* *注:当使用MongoDB 32位时,您只能获得大约2gb的数据

四月11日星期四11:02:26[initandlisten]* *见http://blog.mongodb.org/post/137788967/32-bit-limitations

四月11日星期四11:02:26[initandlisten]* *带-日记,上限较低

四月11日星期四11:023:26[initandlisten]

四月11日星期四11:02:26[initandlisten]db版本v2.0.6,pdfile版本4.5

四月11日星期四11:02:26[initandlisten]git版本: E1 c 0 CBC 25863 f 6356 aa 31375 add 7 bb 49 FB 05 BC

四月11日星期四11:02:26[initandlisten]bui

ld info: Linux domU-12-31-39-01-70-B4 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_41
    Thu Apr 11 11:02:26 [initandlisten] options: {}
    Thu Apr 11 11:02:26 [websvr] admin web console waiting for connections on port 28017
    Thu Apr 11 11:02:26 [initandlisten] waiting for connections on port 27017

打开mongo shell

~ mongo

    MongoDB shell version: 2.0.6
    connecting to: test

进入mongo shell, 列表显示数据库

> show dbs

    db      0.0625GB
    feed    0.0625GB
    foobar  0.0625GB
    local   (empty)

切换数据库

> use foobar

   switched to db foobar

列表显示数据集

> show collections

    blog
    system.indexes

R语言开发环境2.15.0,WinXP

~ R
R version 2.15.0 (2012-03-30)
Copyright (C) 2012 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: i386-pc-mingw32/i386 (32-bit)

2. rmongodb函数库

文字说明部分:

rmongodb的开发了一大堆的函数,对应mongo的操作。比起别的NoSQL来说,真是工程浩大啊。但我总觉得封装粒度不够,写起代码来比较复杂。

下面列出了所有rmongodb函数库,我只挑选几个常用的介绍。

建立mongo连接

mongo<-mongo.create()

查看接连是否正常

mongo.is.connected(mongo)

创建一个BSON对象缓存

buf <- mongo.bson.buffer.create()

给对象buf增加element

mongo.bson.buffer.append(buf, "name", "Echo")

增加对象类型的element

score <- c(5, 3.5, 4)
names(score) <- c("Mike", "Jimmy", "Ann")
mongo.bson.buffer.append(buf, "score", score)

增加数组类型的element

mongo.bson.buffer.start.array(buf, "comments")
mongo.bson.buffer.append(buf, "0", "a1")
mongo.bson.buffer.append(buf, "1", "a2")
mongo.bson.buffer.append(buf, "2", "a3")

关闭数组类型的element

mongo.bson.buffer.finish.object(buf)

取出缓存数据

b <- mongo.bson.from.buffer(buf)

数据库.数据集

ns="db.blog"

插入一条记录

mongo.insert(mongo,ns,b)

#mongo shell:(Not Run)
db.blog.insert(b)

创建查询对象query

buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "name", "Echo")
query <- mongo.bson.from.buffer(buf)

创建查询返回值对象

buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "name", 1)
fields <- mongo.bson.from.buffer(buf)

执行单条记录查询

mongo.find.one(mongo, ns, query, fields)

#mongo shell:(Not Run)
db.blog.findOne({query},{fields})

执行列表记录查询

mongo.find(mongo, ns, query, fields)

#mongo shell:(Not Run)
db.blog.find({query},{fields})

创建修改器对象objNew

buf <- mongo.bson.buffer.create()
mongo.bson.buffer.start.object(buf, "$inc")
mongo.bson.buffer.append(buf, "age", 1L)
mongo.bson.buffer.finish.object(buf)
objNew <- mongo.bson.from.buffer(buf)

执行修改操作

mongo.update(mongo, ns, query, objNew)

#mongo shell:(Not Run)
db.blog.update({query},{objNew})

单行代码修改操作

mongo.update(mongo, ns, query, list(name="Echo", age=25))

#mongo shell:(Not Run)
db.blog.update({query},{objNew})

删除所选对象

mongo.remove(mongo, ns, query)

#mongo shell:(Not Run)
db.blog.remove({query},{objNew})

销毁mongo连接

mongo.destroy(mongo)

代码部分:

共有153个函数

mongo.add.user
mongo.authenticate
mongo.binary.binary
mongo.binary.function
mongo.binary.md5
mongo.binary.old
mongo.binary.user
mongo.binary.uuid
mongo.bson.array
mongo.bson.binary
mongo.bson.bool
mongo.bson.buffer.append
mongo.bson.buffer.append.bool
mongo.bson.buffer.append.bson
mongo.bson.buffer.append.code
mongo.bson.buffer.append.code.w.scope
mongo.bson.buffer.append.complex
mongo.bson.buffer.append.double
mongo.bson.buffer.append.element
mongo.bson.buffer.append.int
mongo.bson.buffer.append.list
mongo.bson.buffer.append.long
mongo.bson.buffer.append.null
mongo.bson.buffer.append.object
mongo.bson.buffer.append.oid
mongo.bson.buffer.append.raw
mongo.bson.buffer.append.regex
mongo.bson.buffer.append.string
mongo.bson.buffer.append.symbol
mongo.bson.buffer.append.time
mongo.bson.buffer.append.timestamp
mongo.bson.buffer.append.undefined
mongo.bson.buffer.create
mongo.bson.buffer.finish.object
mongo.bson.buffer.size
mongo.bson.buffer.start.array
mongo.bson.buffer.start.object
mongo.bson.code
mongo.bson.code.w.scope
mongo.bson.date
mongo.bson.dbref
mongo.bson.destroy
mongo.bson.double
mongo.bson.empty
mongo.bson.eoo
mongo.bson.find
mongo.bson.from.buffer
mongo.bson.from.list
mongo.bson.int
mongo.bson.iterator.create
mongo.bson.iterator.key
mongo.bson.iterator.next
mongo.bson.iterator.type
mongo.bson.iterator.value
mongo.bson.long
mongo.bson.null
mongo.bson.object
mongo.bson.oid
mongo.bson.print
mongo.bson.regex
mongo.bson.size
mongo.bson.string
mongo.bson.symbol
mongo.bson.timestamp
mongo.bson.to.list
mongo.bson.undefined
mongo.bson.value
mongo.code.create
mongo.code.w.scope.create
mongo.command
mongo.count
mongo.create
mongo.cursor.destroy
mongo.cursor.next
mongo.cursor.value
mongo.destroy
mongo.disconnect
mongo.distinct
mongo.drop
mongo.drop.database
mongo.find
mongo.find.await.data
mongo.find.cursor.tailable
mongo.find.exhaust
mongo.find.no.cursor.timeout
mongo.find.one
mongo.find.oplog.replay
mongo.find.partial.results
mongo.find.slave.ok
mongo.get.database.collections
mongo.get.databases
mongo.get.err
mongo.get.hosts
mongo.get.last.err
mongo.get.prev.err
mongo.get.primary
mongo.get.server.err
mongo.get.server.err.string
mongo.get.socket
mongo.get.timeout
mongo.gridfile.destroy
mongo.gridfile.get.chunk
mongo.gridfile.get.chunk.count
mongo.gridfile.get.chunks
mongo.gridfile.get.chunk.size
mongo.gridfile.get.content.type
mongo.gridfile.get.descriptor
mongo.gridfile.get.filename
mongo.gridfile.get.length
mongo.gridfile.get.md5
mongo.gridfile.get.metadata
mongo.gridfile.get.upload.date
mongo.gridfile.pipe
mongo.gridfile.read
mongo.gridfile.seek
mongo.gridfile.writer.create
mongo.gridfile.writer.finish
mongo.gridfile.writer.write
mongo.gridfs.create
mongo.gridfs.destroy
mongo.gridfs.find
mongo.gridfs.remove.file
mongo.gridfs.store
mongo.gridfs.store.file
mongo.index.background
mongo.index.create
mongo.index.drop.dups
mongo.index.sparse
mongo.index.unique
mongo.insert
mongo.insert.batch
mongo.is.connected
mongo.is.master
mongo.oid.create
mongo.oid.from.string
mongo.oid.print
mongo.oid.time
mongo.oid.to.string
mongo.reconnect
mongo.regex.create
mongo.remove
mongo.rename
mongo.reset.err
mongo.set.timeout
mongo.shorthand
mongo.simple.command
mongo.symbol.create
mongo.timestamp.create
mongo.undefined.create
mongo.update
mongo.update.basic
mongo.update.multi
mongo.update.upsert

3. rmongodb基本使用操作

文字说明部分:

首先,要安装rmongodb类库,加载类库。

然后,通过mongo.create()函数,建立与MongoDB Server的连接。如果是本地连接,mongo.create()不要参数,下面例子使用远程连接,增加host参数配置IP地址。mongo<-mongo.create(host=“192.168.1.11”)

检查是否连接正常,mongo.is.connected()。这条语句在开发时会经常使用到。在用R语言建模时,如果对象或者函数使用错误,连接会被自动断开。由于MongoDB的异常机制,断开时不会是提示。大家要手动使用这条命令测试,连接是否正常。

接下来,定义两个变量,db和ns。db是我们需要使用的数据库,ns是数据库+数据集。

下面我们创建一个Mongo对象。

{
        "_id" : ObjectId("51663e14da2c51b1e8bc62eb"),
        "name" : "Echo",
        "age" : 22,
        "gender" : "Male",
        "score" : {
                "Mike" : 5,
                "Jimmy" : 3.5,
                "Ann" : 4
        },
        "comments" : [
                "a1",
                "a2",
                "a3"
        ]
}

然后,分别使用修改器inc,set,$push进行操作。

***删除对象,并断开连接。

代码部分:

安装rmongodb

install.packages(rmongodb)

加载类库

library(rmongodb)

远程连接mongodb server

mongo<-mongo.create(host="192.168.1.11")

查看是否连接正常

print(mongo.is.connected(mongo))

定义db

db<-"foobar"

定义db.collection

ns<-"foobar.blog"

组织bson类型数据

buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "name", "Echo")
mongo.bson.buffer.append(buf, "age", 22L)
mongo.bson.buffer.append(buf, "gender", 'Male')

#对象类型
score <- c(5, 3.5, 4)
names(score) <- c("Mike", "Jimmy", "Ann")
mongo.bson.buffer.append(buf, "score", score)

#数组类型
mongo.bson.buffer.start.array(buf, "comments")
mongo.bson.buffer.append(buf, "0", "a1")
mongo.bson.buffer.append(buf, "1", "a2")
mongo.bson.buffer.append(buf, "2", "a3")
mongo.bson.buffer.finish.object(buf)
b <- mongo.bson.from.buffer(buf)

插入mongodb

mongo.insert(mongo,ns,b)

单条显示插入的数据

buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "name", "Echo")
query <- mongo.bson.from.buffer(buf)
print(mongo.find.one(mongo, ns, query))

使用$inc修改器,修改给age加1

buf <- mongo.bson.buffer.create()
mongo.bson.buffer.start.object(buf, "$inc")
mongo.bson.buffer.append(buf, "age", 1L)
mongo.bson.buffer.finish.object(buf)
objNew <- mongo.bson.from.buffer(buf)
mongo.update(mongo, ns, query, objNew)
print(mongo.find.one(mongo, ns, query))

使用$set修改器,修改age=1

buf <- mongo.bson.buffer.create()
mongo.bson.buffer.start.object(buf, "$set")
mongo.bson.buffer.append(buf, "age", 1L)
mongo.bson.buffer.finish.object(buf)
objNew <- mongo.bson.from.buffer(buf)
mongo.update(mongo, ns, query, objNew)
print(mongo.find.one(mongo, ns, query))

使用$push修改器,给comments数组追加”Orange”数据

buf <- mongo.bson.buffer.create()
mongo.bson.buffer.start.object(buf, "$push")
mongo.bson.buffer.append(buf, "comments", "Orange")
mongo.bson.buffer.finish.object(buf)
objNew <- mongo.bson.from.buffer(buf)
mongo.update(mongo, ns, query, objNew)
print(mongo.find.one(mongo, ns, query))

使用简化修改语句,给对象重新赋值

mongo.update(mongo, ns, query, list(name="Echo", age=25))
print(mongo.find.one(mongo, ns, query))

删除对象

mongo.remove(mongo, ns, query)

销毁mongo连接

mongo.destroy(mongo)

4. rmongodb测试案例

文字说明部分:

批量插入数据,使用修改器批量修改数据

3种修改器速度比较,push最慢push > set>inc

终于push是对数组操作,set是对任意值操作,inc是对数字操作,所以下面测试可能不太公平。测试结果仅供参考。

代码部分:

批量插入数据函数

  batch_insert<-function(arr=1:10,ns){
    library(stringr)
    mongo_insert<-function(x){
      buf <- mongo.bson.buffer.create()
      mongo.bson.buffer.append(buf, "name", str_c("Dave",x))
      mongo.bson.buffer.append(buf, "age", x)
      mongo.bson.buffer.start.array(buf, "comments")
      mongo.bson.buffer.append(buf, "0", "a1")
      mongo.bson.buffer.append(buf, "1", "a2")
      mongo.bson.buffer.append(buf, "2", "a3")
      mongo.bson.buffer.finish.object(buf)
      return(mongo.bson.from.buffer(buf))
    }
    mongo.insert.batch(mongo, ns, lapply(arr,mongo_insert))
  }

批量修改,$inc修改器函数

  batch_inc<-function(data,ns){
    for(i in data){
      buf <- mongo.bson.buffer.create()
      mongo.bson.buffer.append(buf, "name", str_c("Dave",i))
      criteria <- mongo.bson.from.buffer(buf)
      buf <- mongo.bson.buffer.create()
      mongo.bson.buffer.start.object(buf, "$inc")
      mongo.bson.buffer.append(buf, "age", 1L)
      mongo.bson.buffer.finish.object(buf)
      objNew <- mongo.bson.from.buffer(buf)
      mongo.update(mongo, ns, criteria, objNew)
    }
  }

批量修改,$set修改器函数

  batch_set<-function(data,ns){
    for(i in data){
      buf <- mongo.bson.buffer.create()
      mongo.bson.buffer.append(buf, "name", str_c("Dave",i))
      criteria <- mongo.bson.from.buffer(buf)
      buf <- mongo.bson.buffer.create()
      mongo.bson.buffer.start.object(buf, "$set")
      mongo.bson.buffer.append(buf, "age", 1L)
      mongo.bson.buffer.finish.object(buf)
      objNew <- mongo.bson.from.buffer(buf)
      mongo.update(mongo, ns, criteria, objNew)
    }
  }

批量修改,$push修改器函数

  batch_push<-function(data,ns){
    for(i in data){
      buf <- mongo.bson.buffer.create()
      mongo.bson.buffer.append(buf, "name", str_c("Dave",i))
      criteria <- mongo.bson.from.buffer(buf)
      buf <- mongo.bson.buffer.create()
      mongo.bson.buffer.start.object(buf, "$push")
      mongo.bson.buffer.append(buf, "comments", "Orange")
      mongo.bson.buffer.finish.object(buf)
      objNew <- mongo.bson.from.buffer(buf)
      mongo.update(mongo, ns, criteria, objNew)
    }
  }

执行程序,3种修改速度比较,$push最慢

ns="foobar.blog" data=1:1000 mongo.remove(mongo, ns) ## [1] TRUE system.time(batch_insert(data, ns)) ## user system elapsed ## 0.25 0.00 0.28 system.time(batch_inc(data, ns)) ## user system elapsed ## 0.47 0.27 2.50 system.time(batch_set(data, ns)) ## user system elapsed ## 0.77 0.48 3.17 system.time(batch_push(data, ns)) ## user system elapsed ## 0.81 0.41 4.23

看完上述内容,你们对R语言中的MongoDB的示例分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/112494.html

(0)

相关推荐

  • 如何将Linux上的PDB数据库转移到windows上的CDB数据库

    技术怎么将Linux上的PDB数据库传输到windows的CDB数据库本篇内容主要讲解“怎么将Linux上的PDB数据库传输到windows的CDB数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。

    攻略 2021年12月21日
  • 简单平面图怎么画,ppt怎么做简单的平面图

    技术简单平面图怎么画,ppt怎么做简单的平面图1/7
    第一步:在PPT2010中,单击“插入”选项卡,在“插图”组中单击“形状”按钮,在弹出的下拉面板中选择“线条”中的“箭头”,在PPT编辑区按着shift键用鼠标横向拖

    生活 2021年10月30日
  • Oracle 11g RAC中INTERMEDIATE Stuck Archiver状态的解决方法

    技术Oracle 11g RAC中INTERMEDIATE Stuck Archiver状态的解决方法这篇文章给大家介绍Oracle 11g RAC中INTERMEDIATE Stuck Archiver状态的解决方法,

    攻略 2021年11月12日
  • Linux中ssh配置无密码登陆完整步骤以及需要注意的问题有哪些

    技术Linux中ssh配置无密码登陆完整步骤以及需要注意的问题有哪些Linux中ssh配置无密码登陆完整步骤以及需要注意的问题有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小

    攻略 2021年10月22日
  • spark快速入门菜鸟教程(大数据spark入门教程)

    技术Spark该怎样入门本篇文章为大家展示了Spark该怎样入门,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1. Spark简介2009年,Spark诞生于伯克利大学的AMPL

    攻略 2021年12月17日
  • QGIS如何连接Arcgis Server发布数据

    技术QGIS如何连接Arcgis Server发布数据这篇文章主要介绍了QGIS如何连接Arcgis Server发布数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家

    攻略 2021年11月28日