Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
161 views
in Technique[技术] by (71.8m points)

java - MongoDB - spring data - how to pick objects from different arrays into array / list

Object sample:

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

Query: list.key = val1 or val6

Actual results:

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

Expected results:

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

I need to pick all objects in list that equal to criteria.

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

Actually, it retrieves all objects of list in case it contains this value.

Any suggestions?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You need to project array documents using $ operator & for that you need to use $elemMatch in query.

Use this query

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...