2015-03-18 92 views
0

我有一個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) 

回答

1

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

+0

謝謝!這工作,我編輯我的例子重新查詢第二長度(x)之前,我意識到,否則它不會改變。 – variable 2015-03-19 21:35:39