gpt4 book ai didi

java - 从字符串到 MongoDB ObjectID 的转换

转载 作者:可可西里 更新时间:2023-11-01 09:24:30 36 4
gpt4 key购买 nike

我尝试将我的字符串 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)

最佳答案

据我所知,这里有两个问题:

  1. 如何获取 ObjectID 实例的正确 ID?

8001_469437317594492928_1400737805000 不是您可以在数据库中看到的十六进制值,而是时间、机器 ID、pid 和计数器组件的显式串联。该组件用于生成 HEX 值。要获取 HEX 值,您需要使用 ObjectID 实例的 ToString 方法。

这里引用ObjectID组件的解释: https://api.mongodb.com/java/3.0/org/bson/types/ObjectId.html

  1. 如何创建具有特定 Id 的 ObjectId 实例

为了创建具有特定 HEX 值的新 ObjectID 实例,请使用:var objectId = new ObjectId(hexStringId)

关于java - 从字符串到 MongoDB ObjectID 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29553845/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com