1

プロバイダーから JSON データを取得し、R を使用して mongodb に追加しています。将来的には R と Shiny を使用してデータを表示する予定です。現在、データを JSON オブジェクトに配置して MongoDB に挿入するという問題が発生しています。オブジェクトを追加しますが、データを実際に必要な場所よりも 1 レベル下に配置します。

データは次のように入力されます。

prettify(jsonKill)
[
    {
        "id" : {
            "timestamp" : 1409785080,
            "machine" : 11966932,
            "pid" : 3144,
            "increment" : 11720074,
            "creationTime" : "2014-09-03T22:58:00Z"
        },
    ...
]

これをmongodbに追加するコードは次のとおりです。

library('jsonlite')
library('rmongodb')

m <- mongo.create()
ns <- 'database.collection'
killObject <- fromJSON('http://omitted.because.nda:8000/api/omit')
x <- nrow(killObject)
for(i in 1:x){
  jsonKill <- toJSON(killObject[i:i,])
  bson <- mongo.bson.from.JSON(jsonKill)
  mongo.insert(m, ns, bson)
  paste("Inserting Record: ", i)
}
cursor <- mongo.find(m, ns, bson)
while(mongo.cursor.next(cursor)){
  value <- mongo.cursor.value(cursor)
  list <- mongo.bson.to.list(value)
  str(list)
}

結果は次のとおりです。

{
    "_id" : ObjectId("54081299d5ec83d046d05766"),
    "1" : {
        "id" : {
            "timestamp" : 1409756219,
            "machine" : 2364985,
            "pid" : 9076,
            "increment" : 1079972,
            "creationTime" : "2014-09-03T14:56:59Z"
        },
    ...
}

私が目指しているのは、必ずしもキーではなく、ここに表示されていないキーの 1 つまたは複数を実行するか、その趣旨db.collection.find({"id.pid" : $gt1})のインデックスを作成することです。mongo.index.create(m, ns, {"id.pid"}, mongo.index.unique)id

4

2 に答える 2

2

では箱から出してすぐに動作します。mongo.bson.from.list 名前のないリストを配列に変換できるようになりました。

于 2014-10-01T08:36:43.590 に答える
2

この理由は、rmongodb には現在、配列の使用を妨げるバグがあるためです。


R:

library(rmongodb)

m <- mongo.create()

json <- '{"array":[{"a":1},{"b":2}]}'
bson <- mongo.bson.from.JSON(json)

mongo.insert(m, "database.collection", bson)

MongoDB シェル:

> db.collection.find().pretty()
{
        "_id" : ObjectId("540825d68a271f234b6d62d2"),
        "array" : {
                "1" : {
                        "a" : 1
                },
                "2" : {
                        "b" : 2
                }
        }
}

その目的のために、その問題の回避策を提供するパッケージ ( rmongodbHelper ) を開発しました。

R:

library(devtools)
install_github("joyofdata/rmongodbHelper")
library(rmongodbHelper)

json <- '{"array":[{"a":1},{"b":2}]}'
bson <- rmongodbHelper::json_to_bson(json)

mongo.insert(m, "database.collection", bson)

MongoDB シェル:

> db.collection.find().pretty()
{
        "_id" : ObjectId("540826738a271f234b6d62d4"),
        "array" : [
                {
                        "a" : 1
                },
                {
                        "b" : 2
                }
        ]
}

このパッケージと R での MongoDB の使用に関する詳細情報は、私の Web サイトにあります。

MongoDB - R の状態


MongoDB は、それ自体が配列を含む可能性のあるベア配列 (オブジェクトのみ) を格納できないことに注意してください。

于 2014-09-04T08:47:32.957 に答える