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

このエラーは、コードにセマンティクス エラーがある場合に発生する可能性があります。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 に答える
0

そのオブジェクト内に他のフィールドがある場合は、次のようにします。

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

フィールドを更新するよりも安全です。

于 2011-09-20T15:35:38.577 に答える