1

我正在使用 rmongodb 在 R 中运行 mongodb 查询。我需要查找文档中是否存在某个字段。但是,$exists 不会产生任何结果。这是用于查询的示例代码。

library(rmongodb)
> mongo <- mongo.create(host="localhost")
> dbns <- mongo.get.database.collections(mongo, db="namedisambiguation") 
> buf <- mongo.bson.buffer.create()
> mongo.bson.buffer.start.object(buf, "name")
[1] TRUE
> mongo.bson.buffer.append(buf, "$exists", 1L)
[1] TRUE
> qrbson <- mongo.bson.from.buffer(buf)
> cur <- mongo.find(mongo, ns=dbns, query=qrbson)
> qrbson
    name : 3     
        $exists : 16     1

> mongo.cursor.next(cur)
[1] FALSE

我已经尝试使用 TRUE、“True”、“true”、1 而不是 1L 进行此查询,但所有这些都会产生相同的结果。我已经在 mongo 控制台中检查了这个查询,结果是根据需要。但是在 R 中,它的生产是空的。我在某处做错了什么吗?

4

1 回答 1

0

我可以重现您的问题,我想这是一个错误。

但是您可以在这里做的就是按照这些思路进行操作-使用我的数据库对代码进行了测试:

ns <- "test.things"
qs1 <- '{ "label": { "$exists": true } }'   # field exists
qs2 <- '{ "none": { "$exists": true } }'    # field does not exist

mongo.count( mongo, ns, qs1 )
[1] 9

mongo.count( mongo, ns, qs2 )
[1] 0

如果您需要检查一个文档中是否存在两个字段,您JSON应该如下所示:

qs3 <- '{ "name": { "$exists": true }, "schoolname": { "$exists": true } }'

JSON这应该可以使您获得所需的结果,尽管它与您使用符号的原始方法有点不同。从rmongodb文档中mongo.find()

论据 ...

查询 ...

或者,查询可能是一个有效的 JSON 字符串,它将由 mongo.bson.from.JSON() 转换为 mongo.bson 对象。

于 2014-01-27T12:32:17.073 回答