Spring Data MongoDB查询以匹配数字和数字字符串



在我的收藏中,一些文档被保存为:

{
val: "1"
}
{
val: "A"
}

还有一些类似于:

{
val: 1
}

在相应的模型类中,字段被声明为对象:

class MyModel {
@Id
private String id;
private Object val;
...

现在我有一个存储库方法:

@Query("{ val: ?0 }")
Page<MyModel> findByValue(Object val)

如果我将val作为整数传递给像repo.findByValue(Integer.parseInt(valStr))这样的存储库方法,它就找不到字符串数字1,如果我不这样做,它就不会找到数字1。有没有一种方法可以生成既匹配数字字符串又匹配实际数字的查询?

您需要编写两个findBy...查询来获得值并将其组合,或者您可以轻松地开发聚合。。。

db.collection.aggregate([
{
$project: {
val: { $toString: "$val" }
}
},
{ $match: { val: "1" } }
])

正在工作的Mongo游乐场

java代码是

@Autowired
private MongoTemplate mongoTemplate;
public List<YOUR_CONVERTER_CLASS> test(String value) {
Aggregation aggregation = Aggregation.newAggregation(   
project().and(ConvertOperators.ToString("val"))
.as("val"),
match(Criteris.where("val").is(value))
).withOptions(AggregationOptions.builder().allowDiskUse(Boolean.TRUE).build());
return mongoTemplate.aggregate(aggregation, mongoTemplate.getCollectionName(YOUR_COLLECTION.class), Object.class).getMappedResults();
}

注意:这不是经过测试的,而是基于正在运行的mongo脚本编写的

最新更新