2011-09-20 64 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); 

並且也可以除去如上述