java - 如何正确查询多个嵌套数组以进行字符串匹配?- MongoDB
问题描述
我正在尝试构建一个 MongoDB 查询,我可以在其中搜索对象列表,这些对象都包含多个嵌套的对象数组,其中最低级别的属性包含字符串的一部分。
这是这些对象的一般结构:
{
"name": "Foo"
"structure": {
"configs":[
{
"combinations": [
{
"title": "item1"
},
{
"title": "item2"
}
]
},
{
"combinations": [
{
"title": "item3"
},
{
"title": "item4"
}
]
}
]
}
}
现在,当我搜索“item1”或仅搜索“1”时,我希望返回该示例对象,因为第一个combinations
数组包含一个带有 title 的对象item1
。由于我在 Spring Boot 中构建应用程序,通常查询可以很容易地由findAllByPropertyMatching(String searchTerm)
存储库类中通常的高级处理。由于它的复杂性,这在这种情况下不起作用,我真的在努力解决这个问题。
我尝试了自定义查询...
@Query(value = "{'structure.configs.$[].combination.$[].title': {$regex : ?0, $options: 'i'}}")
public List<Item> findAllByStructuregMatchesRegex(String query);
...但显然它有多个问题。
因为数据是从外部源加载的,所以我无法更改底层数据结构。我也无法缓存所有项目并使用 Java 逻辑对其进行过滤,因为数据集太大了。
谁能指出我正确的方向?非常感谢您的帮助,非常感谢!
解决方案
经过更多的试验和错误,解决方案似乎非常简单:
@Query(value = "{'structure.configs': {\n" +
" '$elemMatch': {\n" +
" 'combinations': {\n" +
" '$elemMatch': {\n" +
" 'title': {$regex : ?0, $options: 'i'}\n" +
" }\n" +
" }\n" +
" }\n" +
" }}")
public List<Item> findAllByStructureMatchesRegex(String query);
推荐阅读
- c# - NFC MIFARE Classic 1K 无法读取或写入
- sql-server - 如何用动态列替换 T-SQL PIVOT 中的 NULL 值
- android - 如何在横向使用 ViewPager2 进行轮播布局
- reactjs - 反应钩子关闭问题
- data-visualization - 二次排序(单独)
- spring-boot - 为特定请求暂停骆驼路线
- server - fs mksdirsync 在本地主机中创建文件夹但在服务器中不起作用
- ruby-on-rails - 如何在rails的.erb文件中添加符号(:)
- nao-robot - 如何控制 Pepper QiSDK 上的 LED?
- java - IntelliJ IDEA 中当前运行目录的问题