rmongodb: $exists 给出空结果

Posted

技术标签:

【中文标题】rmongodb: $exists 给出空结果【英文标题】:rmongodb: $exists gives empty result 【发布时间】:2014-01-27 07:47:45 【问题描述】:

我正在使用 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 中,它的生产是空的。我在某处做错了什么吗?

【问题讨论】:

周一早上的幽默:很高兴知道不再有“$exists”了。终于男女平等了! :-) 【参考方案1】:

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

但是你可以在这里做的是沿着这些路线做的事情——代码是用我的数据库测试的:

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 表示法的原始方法有点不同。来自rmongodbmongo.find() 的文档

参数 ...

查询 ...

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

【讨论】:

感谢您的回答,它适用于单个查询,这正是我的问题所要求的。但是,我的实际问题是像 $and: [name: $exists: 1, schoolname: $exists: 1] 那样“和”qs1 和 qs2。我只是尝试像你一样做 seggested 但仍然无法正常工作并产生 -1 结果 嗨,$and 和 $or 查询的 JSON 转换器目前存在问题。在github上查看这个问题:github.com/mongosoup/rmongodb/issues/17希望尽快提供解决方案。

以上是关于rmongodb: $exists 给出空结果的主要内容,如果未能解决你的问题,请参考以下文章

使用包 'rmongodb' 处理查询结果集

MongoDB 和 rmongodb。获取查找的大小而不是返回所有结果

file_exists 在托管服务器上给出错误结果

使用 INNER JOIN 和 NOT EXISTS 访问 INSERT 语句给出错误结果

oracle exist 语句

hibernate的对象/关系映射结果为空,exists查不到值的问题-20190823