2012-03-22 7 views
11

W odpowiedzi na question znalazłem interesujące rozwiązanie do wyszukiwania wartości tablic za pomocą $ elemMatch.

Jeśli mamy następujące dokumenty w naszej kolekcji:

{ 
    foo : [ { bar : "xy", baz : 1 }, 
      { bar : "a", baz : 10 } ] 
}, 
{ 
    foo : [ { bar : "xy", baz : 5 }, 
      { bar : "b", baz : 50 } ] 
} 

Następująca kwerenda będzie pasować tylko pierwszy dokument:

db.test.find({ 
    foo : { "$all" : [ { "$elemMatch" : { bar : "xy", baz : 1} }, { "$elemMatch" : { bar : "a", baz : 10 } } ] } 
}); 

Próbowałem kilka innych przykładów i to naprawdę działa. Jednak oficjalna dokumentacja dla operatora $all nie mówi nic o łączeniu tych dwóch zapytań.

Czy jest to zamierzone zachowanie lub błąd? Czy jest to tylko problem, że dokumentacja nie obejmuje tego przypadku użycia?

Odpowiedz

5

To jest zamierzone zachowanie. Dokumentacja nie obejmuje tego przypadku użycia i pracujemy nad tym, aby był on lepszy. Trudno jest jednak udokumentować każdą możliwą kombinację zapytań.

+2

Dziękujemy za informacje. Rozumiem, że trudno jest udokumentować każdą kombinację, ale dobrze byłoby wiedzieć, że niektórzy operatorzy mogą być łączeni. –

+0

Czy jest jeszcze jakiś sposób na zrobienie tego? –

Powiązane problemy