我使用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中,它的产生空洞。我在某处或其他地方做错了吗?
答案 0 :(得分: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对象。