0

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

我如何强制 Mongo 删除该 ObjectId ?

谢谢

4

5 回答 5

2

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

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

static boolean isValid(String s) 

在班上:

org.bson.types.ObjectId

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

希望这会有所帮助。

于 2011-09-21T03:31:21.693 回答
1

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

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

删除该行然后重新插入它?

于 2011-09-20T14:56:31.267 回答
1

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

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,你是自己创建的吗?

于 2011-09-21T11:05:03.467 回答
0

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

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

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

于 2011-09-20T15:35:38.577 回答
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);

也可以像上面那样删除

于 2015-09-05T20:00:44.773 回答