Bazı kayıtları iade etmek için "A VEYA B VEYA (C VE D)" formunun bir MongoDB sorgusu yazmam gerekiyor. Modellerimize veri erişimi için Mongoid kullanıyoruz. Mongoid ile "(A VEYA B) VE (A VEYA C)" sorgularını nasıl yazıyorsunuz?
Bunun için sorguyu "(A veya B veya C) VE (A veya B veya D)" genişletilmiş ve böyle Mongoid Ölçüt yönteminiany_of
kullanılarak umuyordum:
Model.any_of(A, B, C).any_of(A, B, D)
İstediğimi başarmak, ama bu şekilde genişletilir Veritabanına gönderilmeden önce "A VEYA B VEYA C VEYA A VEYA B VEYA D".
Bu sorguyu oluşturmanın bir yolu var mı, yoksa A VEYA B ve C ve D yapmak için bir sorgu oluşturmak ve bunların birliğini almak zorunda mıyım?
Çoklu '$ or' ifadeleri:
Bu gibi bir sorgu üretecektir hiçbir anlam ifade etmeyin. Bir BSON nesnesine dönüştürüldüğünde bunun ne olacağını düşünün. İkincisi, eskiyi geçersiz kılacaktır. Ek olarak, seçici belgeleriniz aynı başarısızlıktan suçludur; temelde '$ veya: [{y: 2}]' yi arıyorsun. –
Çoklu '$ or' ifadeleri mükemmel bir anlam ifade ediyor, görünüşe göre mongo tarafından desteklenmiyorlar (bunu doğrulamak için bir bağlantı var mı, btw?). En iyi uygulama, '(A VEYA B) VE (A VEYA C) 'biçimini,' $ veya 'kullanmak için' A VEYA (B VE C) 'gibi ayırmalara manuel olarak dönüştürmek, çünkü mongoid Bunu bizim için yapmayacaksın. –
Bool mantık anlamında mantıklıdır, ancak yinelenen anahtarlara izin vermeyen JSON Nesne anlamında değildir. DNF'nin sorguyu ifade etmenin doğru yolu olduğundan emin misiniz? –