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
被转换成字符。
谢谢!这工作,我编辑我的例子重新查询第二长度(x)之前,我意识到,否则它不会改变。 – variable 2015-03-19 21:35:39