如何将R与Mongo连接,并能够对numberlong值和嵌套键进行过滤

时间:2015-03-03 16:27:00

标签: r mongodb rmongodb rmongo

我正在尝试使用2个软件包连接R和Mongo:rmongodb和RMongo。 我想从R mongo查询创建,它基于名为id的索引。

Id是一个19个数字的整数,例如1234567891234567891,它以numberlong格式保存在mongo中。使用rmongodb我不知道如何创建查询,它正确理解我的19号索引,例如:

buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "id", '6120367800331863610')
query <- mongo.bson.from.buffer(buf)
b <- mongo.find.one(mongo, ns=namespace, query)

buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append.long(buf, "id", 6120367800331863610)
query <- mongo.bson.from.buffer(buf)
b <- mongo.find.one(mongo, ns=namespace, query)

在代码的第一部分,我的查询看起来像id : 2 6120367800331863610 Id:2为字符串设置数据类型而不是numberLong,我的查询不会产生任何结果。

在我的代码的第二部分中,我给出的数字被r改为: id : 18 6120367800331864064。 Id现在正确18表示NumberLong但数字已更改。 R在处理如此大的数字时遇到问题,我尝试使用bit64更改6120367800331863610的类型,但mongo.bson.buffer.append.long()不支持类型integer64。

我遇到这个问题的第二种方法是使用RMongo包。使用它我能够获得我正在寻找的id,但我不能使用嵌套键:

 dbGetQueryForKeys(mongo,namespace,"{'id':6120367800331863610}","{'id': 1, 'data.product': 1}")

Id是正确的但对于data.product我得到空值。当我将密钥更改为{'id': 1, 'data': 1}时,它为我提供了带有ID的data.frame并将数据解析为列,由于该部分的json类型结构,这是一项耗时的操作。

如果有任何帮助,我将不胜感激。

0 个答案:

没有答案