使用包'rmongodb'处理查询结果集

时间:2012-05-28 22:30:40

标签: r mongodb rmongodb

在使用rmongodb包时以及最终对象应为{{1}时,您将如何处理MongoDB查询的结果集(长度> 1 ) }?

我试图避免R-典型的“按值传递”复制低效率,这种效率只是在单步执行结果集时附加list对象时发生的。但为了做到这一点,我想我需要知道查询总共返回了多少“记录”,不是吗?这样我可以跨越一个空列表,只需在步进结果集时填充 - 或者甚至更好,我可以使用list之类的。

这是一个小例子

示例内容

该示例来自MongoDB Website,并通过rmongodb

实施
lapply()

查询

mongo <- mongo.create(db="test")
ns <- "test.foo"
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "x", 1)
mongo.bson.buffer.append(buf, "y", 1)
x.1 <- mongo.bson.from.buffer(buf)
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "x", 2)
mongo.bson.buffer.append(buf, "y", "string")
x.2 <- mongo.bson.from.buffer(buf)
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "x", 3)
mongo.bson.buffer.append(buf, "y", NULL)
x.3 <- mongo.bson.from.buffer(buf)
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "x", 4)
x.4 <- mongo.bson.from.buffer(buf)

mongo.insert.batch(mongo, ns, list(x.1, x.2, x.3, x.4))

处理查询结果

这是我能想到的最好的:

cursor <- mongo.find(mongo, ns, query=list(y=NULL))

# Alternatively
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "y", NULL)
query <- mongo.bson.from.buffer(buf)
cursor <- mongo.find(mongo, ns, query)

然而,我正在寻找的是out <- NULL while (mongo.cursor.next(cursor)) { out <- c(out, list(mongo.bson.to.list(mongo.cursor.value(cursor)))) } out 或类似的东西:

as.list(cursor)

这可能吗?不幸的是,我并不熟悉C / C ++指针,我认为它是由包使用的。

1 个答案:

答案 0 :(得分:1)

我已在http://cnub.org/rmongodb.ashx#FAQ的rmongodb常见问题解答中回答了这个问题 这显示了如何从查询中获取数组,列表和数据框。