我有以下代码
@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集合中称为外键。
答案 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?