rmongodbパッケージを使用し、最終オブジェクトを?にする場合、MongoDBクエリの結果セット(長さ> 1 )をどのように処理しますか?list
list
結果セットをステップ実行しながらオブジェクトを追加するだけで発生する、Rの典型的な「値渡し」コピーの非効率性を回避しようとしています。しかし、それを行うには、クエリが返した「レコード」の総数を知る必要があると思いますね。そうすれば、空のリストにまたがって、結果セットをステップスルーするときにそのリストを埋めることができます。さらに良いことに、lapply()
などを使用することもできます。
これが小さな例です
コンテンツの例
この例は、MongoDB Webサイトから取得され、 rmongodbを介して実装されています。
mongo <- mongo.create(db="test")
ns <- "test.foo"
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "x", 1)
mongo.bson.buffer.append(buf, "y", 1)
x.1 <- mongo.bson.from.buffer(buf)
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "x", 2)
mongo.bson.buffer.append(buf, "y", "string")
x.2 <- mongo.bson.from.buffer(buf)
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "x", 3)
mongo.bson.buffer.append(buf, "y", NULL)
x.3 <- mongo.bson.from.buffer(buf)
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "x", 4)
x.4 <- mongo.bson.from.buffer(buf)
mongo.insert.batch(mongo, ns, list(x.1, x.2, x.3, x.4))
クエリ
cursor <- mongo.find(mongo, ns, query=list(y=NULL))
# Alternatively
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "y", NULL)
query <- mongo.bson.from.buffer(buf)
cursor <- mongo.find(mongo, ns, query)
クエリ結果の処理
それは私が思いつくことができる最高のものです:
out <- NULL
while (mongo.cursor.next(cursor)) {
out <- c(out, list(mongo.bson.to.list(mongo.cursor.value(cursor))))
}
out
しかし、私が探しているのは、次のようなas.list(cursor)
ものです。
# Say I could find out the length of the result set:
cursor.length <- length(cursor
out <- lapply(cursor.length, function(x) {
mongo.cursor.value(cursor[[x]])
)}
# Alternative:
out <- vector("list", cursor.length)
for (x in 1:cursor.length) {
out[[x]] <- mongo.cursor.value(cursor[[x]])
)}
これは可能ですか?残念ながら、私はパッケージで使用されていると思うC /C++ポインタにあまり詳しくありません。