0

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

1 回答 1

1

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

于 2015-03-19T19:13:58.187 回答