1

RMongo を使用して R から mongo データベースにクエリを実行し、いくつかのネストされたドキュメントの値を返そうとしています。

RMongo のドキュメントに目を通して、次のクエリを理解しました。

output <- dbGetQueryForKeys(mongo, 'test_data', '{"foo": "bar"}', '{"foo":1}')

引数の場所...

db = mongo
collection = 'test_data'
query = '{"foo": "bar"}'
keys = 'Specify a set of keys to return.'

の 1 は何'{"foo":1}'ですか? このキーセットの構造は何ですか? このブログ投稿を確認すると、次のような形式が見つかりました。

結果 < - dbGetQueryForKeys(mongo, "items", "{'publish_date' : { '$gte' : '2011-04-01', '$lt' : '2011-05-01'}}", "{' publish_date' : 1, 'rank' : 1}")

どうやら、キーには値 1 が必要ですか?

ネストされたドキュメントのキーを取得するにはどうすればよいですか? みたいなのが欲しかったら…

output <- dbGetQueryForKeys(mongo, 'test_data', '{"foo": "bar"}', '{"foo1.foo2.foo3.foo4":1,"foo1.foo2.foo3.bar4":1}')

ネストされたキーの場合、現在、もっと似たものを返しています...

                      X_id
1 50fabd42a29d6013864fb9d7
                                                                               foo1
1 { "foo2" : { "foo3" : { "foo4" : "090909" , "bar4" : "1"}}}

... whereoutput[,2]は、キー foo4 と bar4 に関連付けられた値の 2 つの個別の変数 ("090909", "1") ではなく、長い文字列です。

4

2 に答える 2

0

'{"foo":1}' の 1 は何ですか? このキーセットの構造は何ですか?

これらのキーは、MongoDBでの読み取り操作で返されるクエリ プロジェクションです。値「1」は特定のフィールドを含めることを意味し、「0」は除外することを意味します。デフォルトの動作では、射影にすべてのフィールドが含まれます。

ネストされたドキュメントのキーを取得するにはどうすればよいですか?

ネストされたキーの場合、現在、次のようなものを返しています... 1 { "foo2" : { "foo3" : { "foo4" : "090909" , "bar4" : "1"}}} ...where output [,2] は、キー foo4 と bar4 に関連付けられた値の 2 つの個別の変数 ("090909", "1") ではなく、長い文字列です。

RMongo ドライバーは、埋め込み階層を含むデータを返しています。

RMongodbAggregate()コマンドと、MongoDB 2.2+の集約フレームワーク$projectの一部である演算子を使用して、結果出力を再形成および平坦化できます。

于 2013-04-13T15:49:57.387 に答える
0

最終的な目標が、R での何らかのタイプのダウンストリーム処理のためにネストされたオブジェクトから値を抽出することである場合、これで目的が達成されます。集約パイプラインを構築する必要がなく、問題に対する簡単なソリューションです。ネストされた構造に深く入り込んで bar4 に直接アクセスしようとする代わりに、参照した長い文字列を提供するオブジェクトの最上位を抽出します。

output <- dbGetQueryForKeys(mongo, 'test_data', '{"foo": "bar"}', '{"foo1.foo2.foo3.foo4":1,"foo1":1}')

出力は data.frame であるため、「jsonlite」ライブラリを使用してデータを取得できます。

library(jsonlite)
foo1 <- fromJSON(output$foo1)
bar4 <- foo1$foo2$foo3$bar4
于 2017-03-22T23:05:29.660 に答える