Java MongoDb spring数据查询二进制和UUID
我正在尝试使用Spring Data-Mongo模板基于UUID进行查询。生成的查询不会返回预期的文档。当我尝试使用newbindata(type,base64)在shell中运行查询时,它返回文档。生成的查询a使用{“$binary”:“base64”,“$type”:“03}作为匹配筛选器 我有一个id配置为UUID类型的对象Java MongoDb spring数据查询二进制和UUID,java,mongodb,spring-data-mongodb,Java,Mongodb,Spring Data Mongodb,我正在尝试使用Spring Data-Mongo模板基于UUID进行查询。生成的查询不会返回预期的文档。当我尝试使用newbindata(type,base64)在shell中运行查询时,它返回文档。生成的查询a使用{“$binary”:“base64”,“$type”:“03}作为匹配筛选器 我有一个id配置为UUID类型的对象 @Data @NoArgsConstructor @Document(collection = "person") public class Person {
@Data
@NoArgsConstructor
@Document(collection = "person")
public class Person {
@Id
private UUID id;
private String firstName;
private String lastName;
...
}
下面是自定义存储库实现方法
...
Query findPersonQuery = new Query();
findPersonQuery.addCriteria(Criteria.where("_id").is(personId));
final Person person = mongoTemplate.find(findPersonQuery, Person.class);
// process and return person after
....
当我传入UUID时,上面的代码似乎生成了一个解析查询。UUID是a02b2900-b871-11e9-a2a3-2AE2AE2DBCCE4
{ "_id" : { "$eq" : { "$binary" : "6RFxuAApK6DkzNviKiqjog==", "$type" : "03" } } }
当我在mongo shell中运行它时,它不会返回任何内容。在存储库中,它不会返回任何内容
但是,当我将以下查询放入MongoShell中时,我得到了正确的person对象
db.getCollection('person').find({ "_id" : new BinData(3, "6RFxuAApK6DkzNviKiqjog==")})
我希望生成的查询返回UUID为a02b2900-b871-11e9-a2a3-2AE2ADBCCE4的人员
{ "_id" : { "$eq" : { "$binary" : "6RFxuAApK6DkzNviKiqjog==", "$type" : "03" } } }
问题:
final ByteBuffer buffer = ByteBuffer.wrap(new byte[16]);
buffer.putLong(personId.getMostSignificantBits());
buffer.putLong(personId.getLeastSignificantBits());
final String base64PersonId = Base64.encodeBase64String(buffer.array());
final String query = String.format("{ _id: new BinData(3,\"%s\")}", JSONObject.escape(username), base64PersonId);
return new BasicQuery(query);
将UUID类型更改为对象:
@Data
@NoArgsConstructor
@Document(collection = "person")
public class Person {
@Id
private Object id;
private String firstName;
private String lastName;
...
}
在同一个问题上挣扎。例如,您:-)