我正在尝试使用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类型结构,这是一项耗时的操作。
如果有任何帮助,我将不胜感激。