1

rmongodb と RMongo の 2 つのパッケージを使用して、R と Mongo を接続しようとしています。id という名前のインデックスに基づく R mongo クエリから作成したいと思います。

Id は 1234567891234567891 などの 19 桁の整数で、mongo では numberlong 形式で保持されます。rmongodb を使用して、19 桁のインデックスを正しく理解するクエリの作成方法がわかりません。

buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "id", '6120367800331863610')
query <- mongo.bson.from.buffer(buf)
b <- mongo.find.one(mongo, ns=namespace, query)

また

buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append.long(buf, "id", 6120367800331863610)
query <- mongo.bson.from.buffer(buf)
b <- mongo.find.one(mongo, ns=namespace, query)

コードの最初の部分で、クエリはid : 2 6120367800331863610 Id: 2 set data type for string not for numberLong のようになり、クエリは結果を生成しません。

コードの 2 番目の部分では、与えている数値が r によって : に変更されています id : 18 6120367800331864064。Id は正しい 18 で NumberLong を表しますが、番号が変更されています。R はこのような大きな数の処理に問題があります。bit64 を使用して 6120367800331863610 の型を変更しようとしましたが、integer64 型は ではサポートされていませんmongo.bson.buffer.append.long()

この問題に対する私の 2 番目のアプローチは、RMongo パッケージを使用することでした。それを使用して、探していたIDを取得できましたが、ネストされたキーを使用できません:

 dbGetQueryForKeys(mongo,namespace,"{'id':6120367800331863610}","{'id': 1, 'data.product': 1}")

Id は正しいですが、data.product の場合は null 値を取得します。キーを に変更する{'id': 1, 'data': 1}と、ID を含む data.frame が返され、データが列に解析されます。これは、この部分の json 型の構造のために時間がかかる操作です。

どんな助けにも感謝します。

4

0 に答える 0