我正在努力在 R 和 rmongodb 中使用 $or 创建查询。我想效仿的是来自 cmdline mongo 的:
db.people.find( { $or : [ {"person.cell": { $exists : true } }, {"person.home": { $exists : true } } ] })
我想提取 person.cell 不为 null 或 person.home 不为 null 的记录。我可以单独查询每个,但是当我使用 $or 在 rmongodb 中创建缓冲区时无法取回数据,使用 rmongodb 的 R 代码如下所示:
l <- list("$exists"="true")
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.start.array(buf, "$or")
mongo.bson.buffer.append.list(buf, "person.cell", l)
mongo.bson.buffer.append.list(buf, "person.home", l)
mongo.bson.buffer.finish.object(buf)
b <- mongo.bson.from.buffer(buf)
mongo.find(mongo, "work.people", b)
这不会返回任何记录,没有错误,只是一个空集。正如我所提到的,我可以在 person.cell 或 person.home 上进行查找并获得结果,但当我尝试执行 $or(在 rmongodb 中)以便我使用 person.cell 或 person.home 提取记录时却不行.
我也试过这个:
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.start.array(buf, "$or")
mongo.bson.buffer.start.object(buf, "person.cell")
mongo.bson.buffer.append(buf, "$exists", "true")
mongo.bson.buffer.finish.object(buf)
mongo.bson.buffer.start.object(buf, "person.home")
mongo.bson.buffer.append(buf, "$exists", "true")
mongo.bson.buffer.finish.object(buf)
mongo.bson.buffer.finish.object(buf)
b <- mongo.bson.from.buffer(buf)
mongo.find(mongo, "work.people", b)
但是我得到了相同的空集结果(当我查看它时,“b”看起来是一样的)。我坚持这个。