是用r连接mongodb后,如果查询的数据量很大(查询很快),但在转换时速度很慢,需要很长时间。
所以几个问题:
1.是否在r中必须转换为r的list类型?还是直接可以使用mongo类型?
2.有什么好的方法可以避免类型转换,或者转为较便捷快速的类型?
3.r从mongo中读取数据必须要使用cursor吗?还是有别的快速方法?最后得到rlist变量的时间大约3-4秒,很长
有经验的DX给点建议?
示例代码如下:library(rmongodb)
host <- "127.0.0.1"
username <- "testuser"
password <- "123"
db <- "testdb"
mongo <- mongo.create(host=host , db=db, username=username, password=password)
rlist <- list() #结果集
if(mongo.is.connected(mongo))
{
ns = "testdb.datas"
#查询
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "S1", 1) #这里是int类型,所以1没有引号
query <- mongo.bson.from.buffer(buf)
#查询记录数
count <- mongo.count(mongo, ns, query)
#查询一条记录
onerecord = mongo.find.one(mongo, ns, query)
print(onerecord)
#查询结果集
cursor <- mongo.find(mongo, ns, query)
while (mongo.cursor.next(cursor)) {
val <- mongo.cursor.value(cursor)
rlist[[length(rlist)+1]] <- mongo.bson.value(val, "S1")
}
}