Rmongodb检测和删除不良文件

时间:2015-03-18 22:14:06

标签: r rmongodb

我有一个mongo集合,有时通过在mongo.bson.from.df()创建的bson对象上使用mongo.insert()而不是mongo.insert.batch()来搞砸。

请看这个可重复的例子,首先我介绍一个糟糕的文档,然后是几个好的文档,我试图检测并删除不良文档。检测似乎是成功的,但不是通过_id删除mongo.remove()。

如果此脚本有效,则在检测和删除后,length(x)应该缩短一个记录。

感谢。

library(rmongodb)
ns <- "testdb.del"
mongo <- mongo.create()
mongo.drop(mongo,ns)
df1 <- data.frame(numbers=rnorm(7),alphas=letters[1:7],monumbs=1:7)
df1
b <- mongo.bson.from.df(df1)
mongo.insert(mongo,ns,b) #insert bad document
mongo.insert.batch(mongo,ns,b) #insert good documents
x <- mongo.find.all(mongo,ns)
length(x)

for(i in 1:length(x)){
  if(is.na(names(x[[i]]["numbers"]))){ #bad documents don't have the names in the right place
    print("bad document. Trying to remove.")
    rm.id <- mongo.bson.from.list(x[[i]]["_id"]) #grab _id of bad document and turn to bson
    mongo.remove(mongo,ns,rm.id)  #remove it.
  }
}

x <- mongo.find.all(mongo,ns)
length(x)

1 个答案:

答案 0 :(得分:1)

使用x <- mongo.find.all(mongo,ns, mongo.oid2character = F)。在您的查询中,mongodb oid被转换为字符。