2014-01-27 34 views
1

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

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 

我试过这个查询使用真,“真”,“真”,1而不是1L,但所有这些产生相同的结果。我在mongo控制台中检查了这个查询,结果是根据需要的。但在R中,它的产量是空的。我在某个地方或什么地方做错了吗?

+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对象。

+0

感谢您的答案,它适用于单个查询和它的确切需求。然而,我的实际问题是“和”qs1和qs2像{$和:[{name:{$ exists:1}},{schoolname:{$ exists:1}}]}。我只是尝试像你一样做seggested,但仍然不工作,并产生-1作为结果 –

+0

看到编辑答案 – vaettchen

+0

谢谢!工作 –