Abrufen einer Teilmenge von Daten aus MongoDB
-
11-12-2019 - |
Frage
Wenn ich eine ähnliche Sammlung habe wie:
[
{ "test": [ { "a": 1, "b": 2 }, { "a": 10, "b": 1 } ] },
{ "test": [ { "a": 5, "b": 1 }, { "a": 14, "b": 2 } ] },
...
]
Wie erhalte ich nur eine Teilmenge von Daten, die aus den folgenden bestehen a
werte wann b
is 2
?In SQL wäre dies etwas Ähnliches wie:
SELECT test.a FROM collection WHERE test.b = 2
Ich verstehe, dass ich die Daten, die ich erhalte, mit so etwas einschränken kann:
collection.find({ }, { "test.a": 1 })
Aber das gibt alles zurück a
Wertvorstellungen.Wie kann ich es so einschränken, dass es nur die Werte zurückgibt, in denen b
is 2
(der WHERE test.b = 2
teil des SQL-Äquivalents)?
Lösung
Sie können dies tun, indem Sie ein Selektorobjekt als ersten Parameter Ihres hinzufügen find
rufen Sie an und verwenden Sie die $elemMatch
projektionsoperator:
collection.find({ 'test.b': 2 }, { test: { $elemMatch: { b: 2 } }, 'test.a': 1 })
Aber das wird nur das erste zurückgeben test
array-Element pro Dokument, wobei b
ist 2.Sie müssten das Aggregationsframework verwenden, wenn sich in Ihrem mehrere b: 2-Elemente befinden können test
Array.