Mongo中的ObjectId错误

时间:2011-09-20 09:39:05

标签: mongodb morphia

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

我如何强制Mongo删除那个ObjectId?

由于

5 个答案:

答案 0 :(得分:2)

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

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

static boolean isValid(String s) 
课堂上的

org.bson.types.ObjectId

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

希望这会有所帮助。

答案 1 :(得分:1)

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

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

删除该行然后重新插入?

答案 2 :(得分: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)

然而,你有一个不合适的ObjectIf很奇怪,你自己创建了吗?

答案 3 :(得分:0)

如果您在该对象中有任何其他字段,请执行以下操作:

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

然后重新添加,这应该比对该字段进行更新更安全。

答案 4 :(得分: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);

并且它也可以如上所述删除