2011-09-20 66 views
0

MongoDB中存在问题。 不知何故,我在行条目中有一个错误的ObjectId。 ObjectId的长度无效。Mongo中的ObjectId错误

我该如何强制Mongo删除该ObjectId?

感谢

回答

1

我想知道如果我只是不理解这个问题;但你不能简单地做一个:

db.collection.remove({"_id":"yourInvalidId"}); 

删除行然后重新插入它?

0

,如果你有一个对象中的任何其他字段只是做到以下几点:

db.collection.remove({"fieldName":"fieldValue"})

,然后就重新添加,这应该是不是做一个更新的领域更安全。

2

MongoDB中的ObjectId是一个特殊的12字节BSON数据类型,它被设计为在分配时具有很高的唯一性(即:基于当前时间,特定机器等生成)。

您可以使用MongoDB驱动程序提供的方法检查给定ID字符串的有效性。例如,在Java中,你可以使用下面的方法:

static boolean isValid(String s) 

org.bson.types.ObjectId 

检查一个给定的输入字符串是否是corrent的ObjectId与否。

希望这会有所帮助。

1

由于您无法更新_id字段(这是mongo限制),因此您必须复制行并删除旧行。 在shell:

var row = db.yourcollection.findOne({_id : "your invalid id"}) 
db.yourcollection.remove({_id : "your invalid id"})) 
row._id = new ObjectId() 
db.yourcollection.insert(row) 

然而,这是奇怪的是,你有一个不良lengthed OBJECTIF,你自己创建它?

+0

只是一个供参考;你在这里采取了额外的步骤。您可以从中找到并排除_id,然后当您插入新行时,它会自动创建一个新的ID。 – Petrogad

0

当代码有语义错误时,可能会发生此错误。根据objectId的行可以在不删除的情况下进行更新。

BasicDBObject query = new BasicDBObject(); 
        query.put("_id", "your id"); 
        DBObject dbObj = testCol.findOne(query); 
        BasicDBList Brand_children= (BasicDBList) dbObj.get("children"); 
        Brand_children.add(itemBrand); 
        System.out.println(Brand_children); 
        testCol.save(dbObj); 

并且也可以除去如上述