Potrzebuję napisać zapytanie MongoDB o formularzu "A LUB B OR (C i D)", aby zwrócić niektóre rekordy. Używamy Mongoida do dostępu do danych naszych modeli.Jak piszesz pytanie "(A OR B) I (A OR C)" z Mongoidem?
Poszerzyłem to zapytanie o "(A OR B OR C) ORAZ (A LUB B OR D)" i miałem nadzieję, że za pomocą metody Mongoid's Criteria any_of
wykonam to, co chcę, ale to jest rozszerzone "A OR B LUB C OR A LUB B OR D" przed wysłaniem do bazy danych.
Czy istnieje sposób na zbudowanie tego zapytania lub czy muszę zbudować jedno zapytanie, aby wykonać A OR B, a drugie wykonać C i D i złączyć je?
wielu '$ or' sprawozdania nie ma sensu. Zastanów się, co to będzie po przekonwertowaniu na obiekt BSON. Ta ostatnia zastąpi pierwszą. Dodatkowo, twoje dokumenty selektora są winne tego samego błędu; w zasadzie szukasz "$ lub: [{y: 2}]". –
Wiele instrukcji '$ lub' ma sens, po prostu nie są obsługiwane przez mongo (czy istnieje link do zweryfikowania tego, btw?). Wygląda na to, że najlepszą praktyką jest ręczne przekształcanie spójników w postaci '(A OR B) I (A LUB C)' w disjunkcje typu 'A OR (B/C)' w celu użycia '$ lub', ponieważ mongoid nie zrobimy tego dla nas. –
Ma to sens w logice logiki Boolean, ale nie w sensie JSON Object, który nie pozwala na duplikowanie kluczy. Masz rację, ponieważ DNF jest właściwym sposobem wyrażenia zapytania. –