0

単純な rmongodb クエリを機能させるのに問題があります。再現可能な例を次に示します。

この部分は機能しません。

rm(list=ls())
library(rmongodb)
mongo <- mongo.create(host="localhost")
mongo.is.connected(mongo)
ns <- "mydb.test"

x <- data.frame(thread.ids=c(276097L,26509L),num.replies=c(0L,23L),stringsAsFactors = F)
x
b <- mongo.bson.from.df(x)
b
mongo.drop(mongo,ns)
mongo.insert.batch(mongo,ns,b)
a <- mongo.find.all(mongo,ns)
a
query1 <- mongo.bson.from.list(list("thread.ids"=276097L))
query1

l <- mongo.find.all(mongo,ns,query1)
l
l <- mongo.find.one(mongo,ns,query1)
l
l <- mongo.find.one(mongo,ns,'{"thread.ids" : "276097" }')
l
l <- mongo.find.one(mongo,ns,'{"thread.ids" : 276097 }')
l

そして、何らかの理由で、この部分は機能します:

x <- data.frame(name=c("Dave","Fred"),age=c(27L,31L),stringsAsFactors = F)
x1 <- mongo.bson.from.df(x)
x1
mongo.insert.batch(mongo, ns, x1)
query3 <- mongo.bson.from.list(list("name"="Dave"))
query3
l <- mongo.find.one(mongo,ns,'{"name" : "Dave" }')
l
l <- mongo.find.all(mongo,ns,query3)
l
l <- mongo.find.one(mongo,ns,query3)
l

助けてくれてありがとう。thread.ids を文字として作成しても、それらのレコードが見つかりません。

アップデート:

さらに作業を進めると、問題が明らかになります。このワークフローは、ピリオドを含むパラメーター名を受け入れません。たとえば、「thread.ids」の名前を「threadids」に変更すると、すべてが機能し始めます。

クランのドキュメントに記載されている github でこの問題を開きました: https://github.com/mongosoup/rmongodb/issues/75

4

1 に答える 1

1

クエリに明示的にIDを入力してくださいinteger(実際に整数の場合):

class(26509)
class(26509L)
query1 <- mongo.bson.from.list(list('thread.ids' = 26509L))

お役に立てれば。

編集:再現可能な例を再確認
した後: 1. b <- mongo.bson.from.df(x)bsons のリストを作成 します
mongo.insertlistmongo.bson.from.list()

{
    "_id" : ObjectId("5502e4cc84a98eebe8a9b5ab"),
    "1" : {
        "thread.ids" : 276097,
        "num.replies" : 0
    },
    "2" : {
        "thread.ids" : 26509,
        "num.replies" : 23
    }
}

複数のレコードを挿入する場合mongo.insert()は、ループで使用するか、次を使用しますmongo.insert.batch()

mongo.insert.batch(mongo,"mydb.test",b)

このコードは 2 つのオブジェクトを挿入します。

{
    "_id" : ObjectId("5502e65984a98eebe8a9b5ac"),
    "thread.ids" : 276097,
    "num.replies" : 0
}

{
    "_id" : ObjectId("5502e65984a98eebe8a9b5ad"),
    "thread.ids" : 26509,
    "num.replies" : 23
}
于 2015-03-12T19:42:10.020 に答える