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)?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top