【问题标题】:MongoDB - spring data - how to pick objects from different arrays into array / listMongoDB - 弹簧数据 - 如何从不同的数组中挑选对象到数组/列表中
【发布时间】:2021-01-05 18:08:13
【问题描述】:

对象示例:

[
    {
        "name": "aaa",
        "list": [
            {
                "key": "val1"
            },
            {
                "key": "val2"
            },
            {
                "key": "val3"
            },
            {
                "key": "val4"
            }
        ]
    },
    {
        "name": "bbb",
        "list": [
            {
                "key": "val2"
            },
            {
                "key": "val4"
            },
            {
                "key": "val6"
            },
            {
                "key": "val8"
            }
        ]
    }
]

查询:list.key = val1 或 val6

实际结果:

[
{"key":"val1"},
{"key":"val2"},
{"key":"val3"},
{"key":"val4"},
{"key":"val2"},
{"key":"val4"},
{"key":"val6"},
{"key":"val8"}
]

预期结果:

[
{"key":"val1"},
{"key":"val6"}
]

我需要选择列表中所有符合条件的对象。

@Query(value="{$or :{ 'listKey' : ?0},{ 'listKey' : ?1} }", fields="{ 'listKey' : 1}")
    public List<Object> findByListKey(String value,String value2); // val1 or val6 

实际上,它会检索列表的所有对象,以防它包含该值。

有什么建议吗?

【问题讨论】:

    标签: java spring spring-data spring-data-mongodb


    【解决方案1】:

    您需要使用$ 运算符& 来投影数组文档,为此您需要在查询中使用$elemMatch

    使用这个查询

    @Query(value="{ list: {$elemMatch: {$or: [{ 'key': ?0 }, { 'key': ?1 }]}}}", fields="{ 'list.$':1}")
    

    【讨论】:

      猜你喜欢
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-15
      • 1970-01-01
      • 1970-01-01
      • 2018-11-25
      • 2016-12-21
      相关资源
      最近更新 更多