在Spring引导中,将字符串十六进制转换为ObjectId,以便在MongoDB中进行聚合

在Spring引导中,将字符串十六进制转换为ObjectId,以便在MongoDB中进行聚合,mongodb,spring-boot,mongodb-query,spring-data,spring-data-mongodb,Mongodb,Spring Boot,Mongodb Query,Spring Data,Spring Data Mongodb,我有下面的代码 @Override public List<Snapshots> getData(final String modelId) { Criteria criteria = Criteria.where("modelId").is(new ObjectId(modelId)); 我知道上面的内容不起作用,因为mongo不知道“$oid是什么”。如果将其更改为ObjectID(“5db6ce13f74c7f9f982f2598”),则它在mongo shell中

我有下面的代码

@Override
public List<Snapshots> getData(final String modelId) {

    Criteria criteria = Criteria.where("modelId").is(new ObjectId(modelId));
我知道上面的内容不起作用,因为mongo不知道“$oid是什么”。如果将其更改为ObjectID(“5db6ce13f74c7f9f982f2598”),则它在mongo shell中工作。请让我知道如何从spring传递这个十六进制id。此modelId类似于另一个集合的objectID,并在快照集合中作为外键引用。

您可以保存(并使用)十六进制字符串或objectID进行搜索

{
   ...,
   'modelId':{
        ObjectId('5db6ce13f74c7f9f982f2598')
    },
   ...
}

你试过SpringDataMongoDB的@DBRef吗

{
   ...,
   'modelId':{
        ObjectId('5db6ce13f74c7f9f982f2598')
    },
   ...
}
Criteria.where("modelId.$oid").is(new ObjectId(modelId))
{
   ...,
   'modelId': '5db6ce13f74c7f9f982f2598',
   ...
}
Criteria.where("modelId.$oid").is(modelId)