0

RMongo に問題があるため、自分の作業を rmongodb に変換しようとしています。ここから、私のクエリはmongoコンソールで次のようになります。

db.final.find({},{"ids.myid":1,"org.name":1,"_id":0}).skip(0).limit(5000)

RMongo では次のようになります。

dbGetQueryForKeys(db,'final', '{}','{"ids.myid":1,"org.name":1,"_id":0}',skip=0,limit=5000)

(後者は値を返しませんが、Mongo コンソールは機能します。)

ドキュメントからの私の理解では、rmongodb では次のようになります。

library(rmongodb)
mcon <- mongo.create(host="myurl:port",db="dbname")

fields = mongo.bson.buffer.create()
mongo.bson.buffer.append(fields, "ids.myid", 1L)
mongo.bson.buffer.append(fields, "org.name", 1L)
mongo.bson.buffer.append(fields, "_id", 0L)

cur <-  mongo.find(mcon,"final",fields=fields, limit=5000) # query takes the default null
df <- mongo.cursor.to.data.frame(cur)

しかし、私は得ています:

data frame with 0 columns and 0 rows

元のクエリの rmongodb への正しい翻訳は何ですか?

次の理由により、接続が有効であることはわかっています。

mongo.get.databases(mcon)

動作し、正しいデータベースを表示します。ただし、コレクションの呼び出し方に問題があるようです。

mongo.find.one(mcon,"final") 

NULLを返しています。これは正常に動作しているにもかかわらずdb.final.findOne()です!

4

2 に答える 2

0

コレクションの名前空間 (ns) が間違っています。データベースの名前がありません。これを試して:

cur <-  mongo.find(mcon,"dbname.final",fields=fields, limit=5000)

mongo.find.one(mcon,"dbname.final")
于 2014-03-03T08:31:39.910 に答える
0

バッファの構築も間違っていました。

fields = mongo.bson.buffer.create()
mongo.bson.buffer.append(fields, "ids.myid", 1L)
mongo.bson.buffer.append(fields, "org.name", 1L)
mongo.bson.buffer.append(fields, "_id", 0L)

になるはずだった

buf = mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "ids.myid", 1L)
mongo.bson.buffer.append(buf, "org.name", 1L)
mongo.bson.buffer.append(buf, "_id", 0L)
fields <- mongo.bson.from.buffer(buf)

ドキュメント経由。

于 2014-03-03T13:47:12.910 に答える