我正在使用OpenCPU和R开发一个应用程序,我对两者都是全新的.我使用mongolite包连接到MongoDB.每次都有多次调用DB并连接,需要很长时间.加上数据处理,绘图等需要花费大量时间来加载具有生成的图的页面.在许多情况下,我必须绘制从多个集合中获取数据.
我注意到,我能够节省3-4秒(每个连接),如果我不连接每一次分贝,而使用现有连接.
如果有人能用最好的方法来指导我是否已经建立了与DB的连接,那将会很棒.
让我简要介绍一下到目前为止我做了什么!
这是我的connect_to_db.R文件
library(mongolite)
dbConnection <- NULL
connect_mongodb = function() {
db={
if(is.null(dbConnection)){ # connect to DB only if connection is NULL, else return global connection object
m <- mongo(collection = myCollection, db = myDb, url = myUrl)
assign("dbConnection", m, envir = .GlobalEnv)
}
return(dbConnection)
}
}
Run Code Online (Sandbox Code Playgroud)
它用于获取文件并从R控制台运行它.但是,当我在opencpu服务器中使用它时,我从另一个用于绘图的R方法调用connect_mongodb方法.我从javascript文件中调用绘图方法如下.
var req = $("#plot").rplot(myPlottingMethod, options).fail(function(){
alert("Error loading results");
})
Run Code Online (Sandbox Code Playgroud)
这样,我的变量"dbConnection"对于该方法是未知的.
我尝试了其他一些使用<<的方式 - 我读的并不是一个很好的方法.我也尝试使用exists()代替is_null.
我尝试了另一种选择,使用ocpu.rpc调用从我的javascript文件调用我的connect_mongodb方法,并将其作为参数传递给rplot调用中的R方法.
var req = ocpu.rpc("connect_mongodb", {})
Run Code Online (Sandbox Code Playgroud)
由于连接到mongolite不会返回一个JSON对象,这个尝试也失败了以下错误 无法获取http:// localhost:xxxx/ocpu/tmp/x07c82b16bb的 JSON响应/ 遗憾的是,jsonlite的jSON和rjson没有帮助转换db对象为JSON
我有一个mongo
数据库,其中包含我要传递给某些R
脚本进行分析的信息.我目前正在使用该mongolite
包将信息传递mongo
给R
.
我在每个mongo条目中都有一个字段checkedByR
,它是一个二进制文件,指示条目是否已经由R
脚本分析.具体来说,我正在通过各自的mongo ID收集mongo条目,在条目上运行脚本,为checkedByR
字段分配a 1
,然后继续.
为了完整起见,我使用以下请求查询数据库:
library(mongolite)
mongoID <- "1234abcd1234abcd1234"
m <- mongolite::mongo(url = "mongodb://localhost:27017",
collection = "collection",
db = "database")
rawData <- m$find(query = paste0('{"_id": { "$oid" : "',mongoID,'" }}'),
fields = '{"_id" : 1,
"checkedByR" : 1,
"somethingToCheck" : 1}')
checkedByR <- 1
Run Code Online (Sandbox Code Playgroud)
但是,我无法使用新checkedByR
字段成功更新mongo条目.
我意识到包中update
存在一个函数mongolite
(请考虑:https://cran.r-project.org/web/packages/mongolite/mongolite.pdf),但我无法收集相关示例来帮助我完成更新处理.
任何帮助将不胜感激.
我试图将我闪亮的应用程序连接到 mongodb 服务器。我在 Shinyapps.io 上部署了应用程序,但一次又一次地出错:
2019-10-22T18:14:14.694520+00:00 shinyapps[1117463]: Listening on http://127.0.0.1:36739
2019-10-22T18:14:36.665309+00:00 shinyapps[1117463]: Warning: Error in : No suitable servers found (`serverSelectionTryOnce` set): [socket timeout calling ismaster on 'seaport-shard-00-01-rysq4.gcp.mongodb.net:27017'] [socket timeout calling ismaster on 'seaport-shard-00-02-rysq4.gcp.mongodb.net:27017'] [socket timeout calling ismaster on 'seaport-shard-00-00-rysq4.gcp.mongodb.net:27017']
2019-10-22T18:14:36.670320+00:00 shinyapps[1117463]: 61: mongo_collection_command_simple
2019-10-22T18:14:36.670321+00:00 shinyapps[1117463]: 60: mongo
2019-10-22T18:14:36.670322+00:00 shinyapps[1117463]: 59: server [/srv/connect/apps/Seaport/app.R#223]
2019-10-22T18:14:36.670413+00:00 shinyapps[1117463]: Error : No suitable servers found (`serverSelectionTryOnce` set): [socket timeout calling ismaster on 'seaport-shard-00-01-rysq4.gcp.mongodb.net:27017'] [socket timeout calling ismaster on 'seaport-shard-00-02-rysq4.gcp.mongodb.net:27017'] [socket timeout calling ismaster on …
Run Code Online (Sandbox Code Playgroud) 我有以下用R编写的函数(我认为)在更新我的mongo数据库集合方面做得很差。
library(mongolite)
con <- mongolite::mongo(collection = "mongo_collection_1", db = 'mydb', url = 'myurl')
myRdataframe1 <- con$find(query = '{}', fields = '{}')
rm(con)
con <- mongolite::mongo(collection = "mongo_collection_2", db = 'mydb', url = 'myurl')
myRdataframe2 <- con$find(query = '{}', fields = '{}')
rm(con)
... code to update my dataframes (rbind additional rows onto each of them) ...
# write dataframes to database
write.dfs.to.mongodb.collections <- function() {
collections <- c("mongo_collection_1", "mongo_collection_2")
my.dataframes <- c("myRdataframe1", "myRdataframe2")
# loop dataframes, write colllections
for(i in …
Run Code Online (Sandbox Code Playgroud) 在尝试通过 mongolite 包连接到 mongodb atlas 后,我随机收到此错误。
library(mongolite)
url = "myurl"
data = mongo(collection = "mycollection", db = "mydb", url = url)
Run Code Online (Sandbox Code Playgroud)
Error: No suitable servers found (`serverSelectionTryOnce` set): [TLS handshake failed: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed calling ismaster on 'cluster0-shard-00-00.skqv5.mongodb.net:27017'] [TLS handshake failed: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed calling ismaster on 'cluster0-shard-00-01.skqv5.mongodb.net:27017'] [TLS handshake failed: error:1416F086:SSL routines:tls_process_server_certificate:certificate
Run Code Online (Sandbox Code Playgroud)
在过去的几周里,我每天都能保持联系。当我在其他电脑上运行它时,它可以工作。我也尝试过在 RStudio 云上运行它并且它有效。当地似乎正在发生一些我不明白的事情。我看过其他帖子也有这个错误,但我不明白如何在 R 中执行此操作。
我可以从mongoDB实例成功检索数据,但需要重新使用objectID进行依赖查询。
以下代码似乎可以获取我的整个对象,但不能获取ID。我想念什么?
# Perform a query and retrieve data
mongoOBj <- m$find('{"em": "test@test.com"}')
Run Code Online (Sandbox Code Playgroud) 试图与令人敬畏的mongolite图书馆进行正则表达式匹配,我仍然不确定我做错了什么,真的很疯狂,我在这里缺少什么.
library(mongolite)
m <- mongo(url = "mongodb://192.168.1.5:27017", db = "products", collection = "sku")
m$count()
#gives 54524
a1 <- m$find('{"item" : { "$regex" : "/.*A*./i" }}')
returns Imported 0 records. Simplifying into dataframe...
#but when you do
a1 <- m$find('{"item" : "ABC"}')
#returns 8 records
a1 <- m$find('{"item" : "AAC"}')
#returns 5 records
a1 <- m$find('{"item" : "AAAC"}')
#returns 18 records
Run Code Online (Sandbox Code Playgroud)
等等.所以我不确定我在mongodb中调用正则表达式运算符的方式有什么问题.任何线索.?谢谢
我正在使用 mongolite 包从 MongoDB 连接和检索数据。 如何在 mongolite 查找查询中传递值
##connecting mongodb
library(mongolite)
mongo<-mongolite::mongo(collection = "Sample", db = "Test", url =
"mongodb://User:123@Wyyuyu:13333/ty2_U",verbose = TRUE)
## getting all data from collection data from collection below query is working fine.
values <- mongo$find()
## But I want to filter specific value by passing value.
for(i in c("process","check","queue"))
{
values <- mongo$find('{"field" : i}',)
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试上面的代码,我会遇到以下问题。请帮我解决
Error: Invalid JSON object: {"field" : i}
Run Code Online (Sandbox Code Playgroud) 数据
在这里,我使用mongolite
将虚拟数据插入到测试 mongodb 数据库中:
library(mongolite)
## create dummy data
df <- data.frame(id = c(1,2,3,4),
region = c("r1", "r1", "r2", "r2"))
> df
id region
1 1 r1
2 2 r1
3 3 r2
4 4 r2
## insert into database
mong <- mongo(collection = "test", db = "test", url = "mongodb://localhost")
mong$insert(df)
Run Code Online (Sandbox Code Playgroud)
题
如何使用该aggregate
方法查找每个区域的记录数?
Mongo Shell 查询
此查询在 mongo shell 中运行时返回正确答案
db.test.aggregate({ $group : { _id : "$region", number_records : { $sum : 1}}})
Run Code Online (Sandbox Code Playgroud)
我现在如何将其翻译成正确的语法mongolite …
在 R 中有很多用于处理 MongoDB 的包。我开始使用 'mongolite' 包,因为我使用 'jsonlite' 和 'mongolite' 构建在 'jsonlite' 之上。但是,我有点困惑,为什么“mongolite”中的插入函数不允许插入 json 对象(帮助说它插入数据帧)?
我应该使用什么包来存储 json 对象并进行简单的查询?
无论如何要关闭蒙古R套装发出的Mongo消息?我已经尝试在mongo()函数中设置verbose = FALSE,但这对这些消息没有任何影响.源代码引用了一个log_level但我看不到任何在任何地方设置它的选项.
每当我使用任何用户名连接到副本集时都会发生这种情况(但此示例适用于用户'moso')
Mongo消息:SCRAM:"moso"认证Mongo消息:SCRAM:认证"moso"(步骤1)Mongo消息:SCRAM:认证"moso"(步骤2)Mongo消息:SCRAM:认证"moso"(步骤3)
这些消息在我的日志中重复了很多次,并且很难看到实际的错误.
我的mongodb集合上有一个这样的json文档:更新文档:
{
"_id" : ObjectId("59da4aef8c5d757027a5a614"),
"input" : "hi",
"output" : "Hi. How can I help you?",
"intent" : "[{\"intent\":\"greeting\",\"confidence\":0.8154089450836182}]",
"entities" : "[]",
"context" : "{\"conversation_id\":\"48181e58-dd51-405a-bb00-c875c01afa0a\",\"system\":{\"dialog_stack\":[{\"dialog_node\":\"root\"}],\"dialog_turn_counter\":1,\"dialog_request_counter\":1,\"_node_output_map\":{\"node_5_1505291032665\":[0]},\"branch_exited\":true,\"branch_exited_reason\":\"completed\"}}",
"user_id" : "50001",
"time_in" : ISODate("2017-10-08T15:57:32.000Z"),
"time_out" : ISODate("2017-10-08T15:57:35.000Z"),
"reaction" : "1"
Run Code Online (Sandbox Code Playgroud)
}
我需要在intent.intent字段上执行group,我正在使用Rstudio和mongolite库.我试过的是:
pp = '[{"$unwind": "$intent"},{"$group":{"_id":"$intent.intent", "count": {"$sum":1} }}]'
stats <- chat$aggregate(
pipeline=pp,
options = '{"allowDiskUse":true}'
)
print(stats)
Run Code Online (Sandbox Code Playgroud)
但它不起作用,上面代码的输出是
_id count
1 NA 727
Run Code Online (Sandbox Code Playgroud) 题
使用mongolite
包R
,如何查询给定日期的数据库?
示例数据
考虑一个test
包含两个条目的集合
library(mongolite)
## create dummy data
df <- data.frame(id = c(1,2),
dte = as.POSIXct(c("2015-01-01","2015-01-02")))
> df
id dte
1 1 2015-01-01
2 2 2015-01-02
## insert into database
mong <- mongo(collection = "test", db = "test", url = "mongodb://localhost")
mong$insert(df)
Run Code Online (Sandbox Code Playgroud)
Mongo shell查询
要在给定日期之后查找条目,我会使用
db.test.find({"dte" : {"$gt" : new ISODate("2015-01-01")}})
Run Code Online (Sandbox Code Playgroud)
如何在R
使用中重现此查询mongolite
?
R尝试
到目前为止我已经尝试过
qry <- paste0('{"dte" : {"$gt" : new ISODate("2015-01-01")}}')
mong$find(qry)
Error: Invalid JSON object: {"dte" : …
Run Code Online (Sandbox Code Playgroud)