当前位置: 首页 > 知识库问答 >
问题:

Spring数据MongoDB:BigInteger到ObjectId的转换

子车煌
2023-03-14

我有一个使用Spring Data MongoDB更新查询的问题。我检索一些对象的_id为Bigintger值。那么我想提出以下质疑:

Query query = new Query(Criteria.where("_id").is(id));
Update update = new Update();
update.set("version",version);
mongoOperations.updateFirst(query, update, Audit.class);

查询部分无法匹配任何文档,因为传递给is()的id值必须以某种方式转换为ObjectId。我找不到这种转换的任何留档。会感激任何帮助。

p、 美国:SpringData Mongodb 1.2版

共有3个答案

呼延英奕
2023-03-14

或者,您可以将“id”字段添加到集合类中,或者可能添加到基类中,并使用org对其进行注释。springframework。数据注释。Id,如下所示:

import org.springframework.data.annotation.Id;

public abstract class BaseDocument {

    @Id
    protected long id;

这将允许您执行表单的查询:

public boolean doesDocumentExist(Class clazz, long documentId) {
    Query queryCriteria = new Query(Criteria.where("id").is(documentId));
    return mongoTemplate.count(queryCriteria, clazz) == 1;
}

用'@id'注释您自己的id字段将把您的id存储为mongo objectId,从而避免您自己进行转换。

韩明德
2023-03-14

您可能想编写一个定制的Spring转换器BigInteger=

请参见此处的文档部分:http://static.springsource.org/spring-data/data-document/docs/current/reference/html/#d0e2670

------更新------

似乎这种转换器已经存在于Spring-Data-MongoDB库中:http://static.springsource.org/spring-data/data-document/docs/1.0.0.M1/api/org/springframework/data/document/mongodb/SimpleMongoConverter.ObjectIdToBigIntegerConverter.html

因此,您只需在Spring配置中指定它。

佟高澹
2023-03-14

您也可以手动转换它:

ObjectId convertedId = new ObjectId(bigInteger.toString(16));
Query query = new Query(Criteria.where("_id").is(convertedId));
 类似资料:
  • 我使用Java8和以下spring规范: 我已经创建了以下转换器: 下列线路不起作用 dbo.put(“_id”,source.getid());**ObjectId objCompany=new ObjectId(Source.getCompany().ToString(16)); 谁能给我一些关于如何将BigInteger转换为ObjectId的指导或者建议一些不同的东西。

  • 标题可能不太清楚,问题在这里 我正在执行此表单中的更新: 仅当没有具有相同用户ID的文档时才在数组中插入文档(解决方法是,唯一索引在数组中不起作用)。代码在mongo控制台上运行良好。从我的应用程序中,我使用以下内容: 如果作为“userid”,我使用的字符串不能是mongo ObjectId,那么这很好,但是如果我在示例中使用该字符串,则执行的查询如下所示(来自mongosniff): 该字符串

  • 我在mongodb 4.0中使用Spring(boot)数据2.2.7。我已经设置了3个集合,试图通过聚合查找操作加入这些集合。 目录 股票 操作 目录 映射由 股票 映射由 productId字段引用目录集合中的_id字段 操作 映射由 组件ID字段指的是库存集合中的_id 我想查询操作或库存收集,以检索相应的节点或组件对象列表,该列表由Product.model字段(在目录集合中)排序。) 虽

  • 假设我有一个用户类,它有一个对客户文档的手动引用: 两个身份我都要 保存用户文档时,“id”将转换为ObjectId,但是customerId将保存为字符串。我可以使用ObjectId类型的customerId,但我更希望将POJO作为字符串,并在保存/查询时将customerId自动转换为ObjectId。似乎没有任何行为类似于@Id的内置注释,但可以用于手动引用。我将如何着手创建一个,或者有更

  • 问题内容: 是否有使用mongoose将字符串转换为node中的objectId的功能?该模式指定某个东西是一个ObjectId,但是当它从字符串保存时,mongo告诉我它仍然只是一个字符串。例如,对象的_id显示为。 问题答案: 您可以这样做:

  • 新Gson()。toJson(新ObjectId()) 当我执行上述操作时,我得到的输出是 “_id”:{“_time”:1374347520,“_machine”:-1025067326,“_inc”:585905201,“_new”:false} 但事实上我希望它像 _id:{$id:51eae100c2e6b6c222ec3431} 这是常见的mongodb ID格式。Java中更可取的方法