我尝试将我的String ID转换为MongoDB ObjectID
public class relevancy_test extends Object implements Comparable<ObjectId> {
public static void main(String[] args) throws UnknownHostException {
MongoClient mongo = new MongoClient("localhost", 27017);
DB mydb = mongo.getDB("test");
DBCollection mycoll = mydb.getCollection("mytempcoll");
BasicDBObject query = null;
Map<ObjectId, DBObject> updateMap = new HashMap<ObjectId, DBObject>();
List<DBObject> dbobj = null;
DBCursor cursor = mycoll.find();
dbobj = cursor.toArray();
for (DBObject postObj : dbobj) {
String id = postObj.get("_id").toString();
ObjectId objId = new ObjectId((String) postObj.get("_id"));
updateMap.put(objId, postObj);
}
}
}
这(String) postObj.get("_id")
是表格"8001_469437317594492928_1400737805000"
运行时出现以下错误
Exception in thread "main" java.lang.IllegalArgumentException: invalid ObjectId [8001_469437317594492928_1400737805000]
at org.bson.types.ObjectId.<init>(ObjectId.java:181)
at org.bson.types.ObjectId.<init>(ObjectId.java:167)
at fetch_data_tanmay.relevancy_test.main(relevancy_test.java:48)
我看到这里有两个问题:
该值8001_469437317594492928_1400737805000
不是您可以在数据库中看到的十六进制值,而是时间,机器ID,PID和计数器组成部分的明确串联。该组件用于生成十六进制值。要获取十六进制值,您需要使用ObjectID实例的方法ToString。
参考此处对ObjectID组件的解释:https : //api.mongodb.com/java/3.0/org/bson/types/ObjectId.html
为了创建具有特定十六进制值的新ObjectID实例,请使用以下命令: var objectId = new ObjectId(hexStringId)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句