Mam zapytanie poniżej. Chcę uzyskać pozycje od 4 do 6, więc tylko wartość: 1 powinna być zgodna, ponieważ ma wartość 5 na b.
> db.test.find({ b : { $gt : 4 }, b: {$lt : 6}});
{ "_id" : ObjectId("4d54cff54364000000004331"), "a" : 1, "b" : [ 2, 3, 4, 5 ] }
{ "_id" : ObjectId("4d54d0074364000000004332"), "a" : 2, "b" : [ 2, 4, 6, 8 ] }
>
Czy ktoś może powiedzieć, dlaczego a: 2 pasuje do tego zapytania? Naprawdę nie rozumiem, dlaczego jest zwracana.
Próbowałem również, co zostało określone w tutorialu ale id nie wydają się działać:
> db.test.find({ b : { $gt : 4, $lt : 6}});
{ "_id" : ObjectId("4d54cff54364000000004331"), "a" : 1, "b" : [ 2, 3, 4, 5 ] }
{ "_id" : ObjectId("4d54d0074364000000004332"), "a" : 2, "b" : [ 2, 4, 6, 8 ] }
>
i ten, aby uniknąć wszelkich nieporozumień dotyczących GT/GTE
> db.test.find({b: {$gt: 4.5, $lt: 5.5}});
{ "_id" : ObjectId("4d54cff54364000000004331"), "a" : 1, "b" : [ 2, 3, 4, 5 ] }
{ "_id" : ObjectId("4d54d0074364000000004332"), "a" : 2, "b" : [ 2, 4, 6, 8 ] }
>
tylko: 1 powinien zostać zwrócony.
Jak sugeruje, dałem $ elemMatch spróbować, ale nie wydaje się do pracy albo (objectIds są różne, bo jestem na innym komputerze)
> db.test.find();
{ "_id" : ObjectId("4d5a24a5e82e00000000433f"), "a" : 1, "b" : [ 2, 3, 4, 5 ] }
{ "_id" : ObjectId("4d5a24bbe82e000000004340"), "a" : 2, "b" : [ 2, 4, 6, 8 ] }
> db.test.find({b: {$elemMatch: {$gt : 4, $lt: 6 }}});
>
Żadne dokumenty zostały zwrócone.
Właściwie oba dokumenty powinny być zwrócone, kwestia oznacza „daj mi wszystkie dokumenty gdzie' B' ma wartość, która wynosi od 4 do 6”, a to jest spełnione według obu dokumentów. Czy możesz dokładniej wyjaśnić, o co ma zapytać? Dlaczego powinienem znaleźć pierwszy dokument, ale nie drugi? – Theo
Tak jak powiedziałeś powyżej, chcę wszystkich dokumentów, które mają ab między 4 a 6. Tylko a: 1 spełnia to (nie obie), ponieważ a: 2 nie zawiera żadnych wartości między 4 a 6 (używając gt i lt wyklucz 4 i 6 sami, gdzie gte i lte mogliby je uwzględnić). Wypróbowałem inne zapytanie (zobacz edytowane pytanie), które jest bardziej przejrzyste i nadal nie działa poprawnie ... – paullb
Widzę, co masz na myśli teraz, myślałem o tym jako o zasięgu (a zakresy są zazwyczaj zawarte w pierwszym elemencie) , ale oczywiście nie jest, jest to ścisłe mniej niż i większe niż. Usunąłem odpowiedź, ponieważ teraz jest jasne, że była ona błędna. – Theo