在Spring Boot中,将String十六进制转换为ObjectId以在MongoDB中进行合并

时间:2020-02-07 08:02:38

标签: 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查询

db.Snapshots.aggregate([
      { 
     "$match":{ 
        "modelId":{ 
           "$oid":"5db6ce13f74c7f9f982f2598"
     }
  },

我知道以上内容将不起作用,因为mongo不知道“ $ oid is”是什么。如果将其更改为ObjectID(“ 5db6ce13f74c7f9f982f2598”),那么它将在mongo shell中运行。请让我知道如何从春季传递此十六进制ID。该modelId类似于另一个集合的objectID,在Snapshots集合中称为外键。

1 个答案:

答案 0 :(得分:0)

您可以保存(并搜索)十六进制字符串或ObjectId

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

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

您是否尝试过spring-data-mongodb的@DBRef?