简单的rmongodb查询不起作用

时间:2015-03-12 06:01:13

标签: r rmongodb

我无法使用简单的rmongodb查询。 这是一个可重复的例子。

这部分不起作用。

rm(list=ls())
library(rmongodb)
mongo <- mongo.create(host="localhost")
mongo.is.connected(mongo)
ns <- "mydb.test"

x <- data.frame(thread.ids=c(276097L,26509L),num.replies=c(0L,23L),stringsAsFactors = F)
x
b <- mongo.bson.from.df(x)
b
mongo.drop(mongo,ns)
mongo.insert.batch(mongo,ns,b)
a <- mongo.find.all(mongo,ns)
a
query1 <- mongo.bson.from.list(list("thread.ids"=276097L))
query1

l <- mongo.find.all(mongo,ns,query1)
l
l <- mongo.find.one(mongo,ns,query1)
l
l <- mongo.find.one(mongo,ns,'{"thread.ids" : "276097" }')
l
l <- mongo.find.one(mongo,ns,'{"thread.ids" : 276097 }')
l

由于某种原因,这部分有效:

x <- data.frame(name=c("Dave","Fred"),age=c(27L,31L),stringsAsFactors = F)
x1 <- mongo.bson.from.df(x)
x1
mongo.insert.batch(mongo, ns, x1)
query3 <- mongo.bson.from.list(list("name"="Dave"))
query3
l <- mongo.find.one(mongo,ns,'{"name" : "Dave" }')
l
l <- mongo.find.all(mongo,ns,query3)
l
l <- mongo.find.one(mongo,ns,query3)
l

感谢您的帮助。即使我将thread.ids作为字符,它仍然找不到那些记录。

更新

进一步的工作暴露了一个问题。此工作流程不接受带有句点的参数名称。例如,当我将&#39; thread.ids&#39; 重命名为&#39; threadids&#39; 时,一切都开始有效。

我已经在cran文档中提到的github上打开了这个问题: https://github.com/mongosoup/rmongodb/issues/75

1 个答案:

答案 0 :(得分:1)

尝试在查询中明确填写integer ID(如果它们实际上是整数):

class(26509)
class(26509L)
query1 <- mongo.bson.from.list(list('thread.ids' = 26509L))

希望这有帮助。

修改
在重新编写可重复的示例之后: 1. b <- mongo.bson.from.df(x)生成bsons列表 2. mongo.insert看,该参数的类型为list,并尝试使用mongo.bson.from.list()将列表转换为bson 所以你以数据库中的以下记录结束:

{
    "_id" : ObjectId("5502e4cc84a98eebe8a9b5ab"),
    "1" : {
        "thread.ids" : 276097,
        "num.replies" : 0
    },
    "2" : {
        "thread.ids" : 26509,
        "num.replies" : 23
    }
}

如果要插入多条记录,请在循环中使用mongo.insert()或使用mongo.insert.batch()

mongo.insert.batch(mongo,"mydb.test",b)

此代码插入2个对象:

{
    "_id" : ObjectId("5502e65984a98eebe8a9b5ac"),
    "thread.ids" : 276097,
    "num.replies" : 0
}

{
    "_id" : ObjectId("5502e65984a98eebe8a9b5ad"),
    "thread.ids" : 26509,
    "num.replies" : 23
}