2011-09-20 2 views
0

Mongo DB에 문제가 있습니다. 어떻게 든 행 항목에 잘못된 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 문자열의 유효성을 검사 할 수 있습니다. 클래스

static boolean isValid(String s) 

:

org.bson.types.ObjectId 

가 주어진 입력 문자열이 corrent ObjectId가인지 여부를 확인하기 위해 예를 들어, 자바, 다음과 같은 방법을 사용할 수 있습니다.

희망이 도움이 되겠습니다.

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) 

그러나 이것은 당신이 이상한 인 잘못 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); 

그리고 또한 위와 같이