【发布时间】:2014-08-08 15:03:09
【问题描述】:
test.xxx的内容:
> use test
switched to db test
> db.xxx.find()
{ "_id" : ObjectId("53e4e4983f6dc95697944b74"), "a" : 1 }
{ "_id" : ObjectId("53e4e49a3f6dc95697944b75"), "a" : 2 }
{ "_id" : ObjectId("53e4e49c3f6dc95697944b76"), "a" : 3 }
R 会话:
> library(rmongodb)
> M <- mongo.create("localhost")
> mongo.is.connected(M)
[1] TRUE
>
> qry1 <- list(
+ "a" = 1
+ )
>
> qry2 <- list(
+ "$or" = list(
+ list("a" = 1),
+ list("a" = 3)
+ )
+ )
>
> qry1 <- mongo.bson.from.list(qry1)
> qry2 <- mongo.bson.from.list(qry2)
>
> mongo.count(M, "test.xxx", qry1)
[1] 1
> mongo.count(M, "test.xxx", qry2)
[1] -1
> mongo.get.last.err(M, "test")
connectionId : 16 24
err : 2 $or needs an array
code : 16 2
n : 16 0
ok : 1 1.000000
qry2 的结果应该是 2。
我必须如何改写qry2 的列表?
我特别想使用 mongo.bson.from.list() 而不是 mongo.bson.from.json() 或从“缓冲区”构建 BSON 的替代方法。
请注意,以下三个问题涉及 $or 但不涉及从 list() 创建 BSON:
【问题讨论】:
-
这是 rmongodb 中的一个错误。不幸的是,目前没有可用的解决方案。请检查此替代方案:stackoverflow.com/questions/12067020/rmongodb-using-or-in-query
-
我成功地实现了使用缓冲区的替代方法——这有点乏味。我希望这个错误可能会因为它的高龄而得到修复。我正在使用你的(除了这个非常棒的错误)包作为原型。 R 需要一个与 MongoDB 的良好接口 - rmongodb 是目前最好的选择。所以我——以及世界上成千上万的其他 R 开发者——希望它能够得到积极的维护。肯定会花时间调查这个错误 - 只是我在 C 编程方面没有值得提及的经验。
-
现在这行得通了!从 github 尝试最新版本的 rmongodb。感谢来自Jeroen Ooms的pull