Rongongodb检测和删除坏文档

问题描述:

我有一个mongo集合,有时候在mongo.bson.from创建的bson对象上使用mongo.insert()而不是mongo.insert.batch()名.df()。Rongongodb检测和删除坏文档

请看看这个可重复的例子,首先我介绍一个坏文档,后面跟着几个好文档,我试着检测并删除坏文档。检测似乎是成功的,但不是用_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) 

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

+0

谢谢!这工作,我编辑我的例子重新查询第二长度(x)之前,我意识到,否则它不会改变。 – variable 2015-03-19 21:35:39