将mongo控制台或RMongo查询转换为rmongodb

时间:2014-02-28 15:40:49

标签: r mongodb rmongodb

我遇到了RMongo的麻烦,所以我试图将我的工作转换为rmongodb。从here开始,我的查询在mongo控制台中显示如下:

db.final.find({},{"ids.myid":1,"org.name":1,"_id":0}).skip(0).limit(5000)

在RMongo中就像这样:

dbGetQueryForKeys(db,'final', '{}','{"ids.myid":1,"org.name":1,"_id":0}',skip=0,limit=5000)

(后者不返回值,但是Mongo控制台可以正常工作。)

我的理解from the documentation是它应该在rmongodb中看起来像这样:

library(rmongodb)
mcon <- mongo.create(host="myurl:port",db="dbname")

fields = mongo.bson.buffer.create()
mongo.bson.buffer.append(fields, "ids.myid", 1L)
mongo.bson.buffer.append(fields, "org.name", 1L)
mongo.bson.buffer.append(fields, "_id", 0L)

cur <-  mongo.find(mcon,"final",fields=fields, limit=5000) # query takes the default null
df <- mongo.cursor.to.data.frame(cur)

但是,我得到了:

data frame with 0 columns and 0 rows

我的原始查询到rmongodb的正确翻译是什么?

我知道我的联系是有效的,因为:

mongo.get.databases(mcon)

工作并显示正确的数据库。但是,似乎我如何调用集合可能存在问题,因为

mongo.find.one(mcon,"final") 

返回NULL。尽管db.final.findOne()正常工作!

2 个答案:

答案 0 :(得分:0)

您的收藏集的名称空间(ns)是错误的。缺少您的数据库的名称。试试这个:

cur <-  mongo.find(mcon,"dbname.final",fields=fields, limit=5000)

mongo.find.one(mcon,"dbname.final")

答案 1 :(得分:0)

我的缓冲区构造也错了。

fields = mongo.bson.buffer.create()
mongo.bson.buffer.append(fields, "ids.myid", 1L)
mongo.bson.buffer.append(fields, "org.name", 1L)
mongo.bson.buffer.append(fields, "_id", 0L)

应该是

buf = mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "ids.myid", 1L)
mongo.bson.buffer.append(buf, "org.name", 1L)
mongo.bson.buffer.append(buf, "_id", 0L)
fields <- mongo.bson.from.buffer(buf)

通过文档。