リンク先の回答には、
簡単な答えは、これはできないということです。
関連するmongodbチケットも参照してください
ただし、 のdata.frame
ような構造で結果を取得するには、 を使用します。操作mongolite
ははるかに簡単です。
mtcarsデータを使用したこの例を考えてみましょう
data("mtcars")
library(mongolite)
mongo <- mongo(db = "test",
collection = "mtcars",
url = "mongodb://localhost")
## insert into database
mongo$insert(mtcars)
# Complete! Processed total of 32 rows.
# [1] TRUE
mongolite::find
クエリ結果を data.frame 構造に自動的に単純化します
df_results <- mongo$find()
# Imported 32 records. Simplifying into dataframe...
head(df_results)
# mpg cyl disp hp drat wt qsec vs am gear carb
# Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
# Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
# Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
# Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
# Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
# Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
または、集約フレームワークを使用して
mongo$aggregate(pipeline = '[{ "$project" : { "mpg" : 1, "wt" : 1, "_id" : 0} },
{ "$limit" : 5 }]')
# Imported 5 records. Simplifying into dataframe...
# mpg wt
# 1 21.0 2.620
# 2 21.0 2.875
# 3 22.8 2.320
# 4 21.4 3.215
# 5 18.7 3.440
そして今、ちょっと恥知らずな自己宣伝のために. 私は、data.table オブジェクトを返す mongolite の拡張に取り組んできました。ここでの考え方は、返されるオブジェクトの速度を上げることですが、返される結果セットが を使用して強制できる場合に限りますrbindlist
。
パッケージはmongolitedt
で、まだ開発中です。
# devtools::install_github("SymbolixAU/mongolitedt")
library(mongolitedt)
bind_mongolitedt(mongo)
mongo$aggregatedt(pipeline = '[{ "$project" : { "mpg" : 1, "wt" : 1, "_id" : 0} },
{ "$limit" : 5 }]')
## now have a data.table object returned
# Imported 5 records.
# mpg wt
# 1: 21.0 2.620
# 2: 21.0 2.875
# 3: 22.8 2.320
# 4: 21.4 3.215
# 5: 18.7 3.440
## clean up
rm(mongo); gc()