Filtering by categories AND tags with full match
You are always one level too deep. Craft is able to proceed parameters like

[
    'and',
    ['targetElement' =&gt; [1, 2, 3],
    ['targetElement' =&gt; ['or', 1, 2, 3],
    ['targetElement' =&gt; 1],
    ['targetElement' =&gt; ['and', 1, 2, 3]
]


And so on.
Yours is

'targetElement' =&gt; ['and', [1,2,3]]


I would suggest you to dump your array

&lt;pre&gt;
{{ dump(array) }}
&lt;/pre&gt;


To see the result. If you don't care about performance just using .one() instead of all() might solve the problem.