R と rmongodb 内で $or を使用してクエリを作成するのに苦労しています。私がエミュレートしたいのは、cmdline mongoからのこれです:
db.people.find( { $or : [ {"person.cell": { $exists : true } }, {"person.home": { $exists : true } } ] })
person.cell が null でない、または person.home が null でないレコードを取得したいと思います。それぞれを個別にクエリできますが、rmongodb で $or を使用してバッファーを作成するとデータを取得できません。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 のいずれかで検索を実行して結果を取得できますが、(rmongodb で) $or を実行しようとすると結果が得られないため、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」を表示すると同じように見えます)。私はこれにこだわっています。