MongoDB: der Versuch zu verwenden, aggregieren $entspannen zu Holen eingebetteten Dokumenten

Ich habe eine MongoDB collection [Benutzer] jede mit einer Reihe von eingebetteten Dokumenten [Fotos].
Ich möchte in der Lage sein, um eine Seite, die listet die neuesten Fotos, zum Beispiel - die letzten 10 hochgeladenen Fotos von jedem Benutzer.

Benutzer

[
    {
        _id: ObjectID
        name: "Matthew"
        Photos: [
            {
                _id: ObjectID
                url: "http://www.example.com/photo1.jpg"
                created: Date("2013-02-01")
            },
            {
                _id: ObjectID
                url: "http://www.example.com/photo3.jpg"
                created: Date("2013-02-03")
            }
        ]
    },
    {
        _id: ObjectID
        name: "Bob"
        Photos: [
            {
                _id: ObjectID
                url: "http://www.example.com/photo2.jpg"
                created: Date("2013-02-02")
            },
            {
                _id: ObjectID
                url: "http://www.example.com/photo4.jpg"
                created: Date("2013-02-04")
            }
        ]
    }
]

Mein Erster Versuch, dies zu lösen war, um alle Benutzer finden, wo Fotos ist nicht null, und Sortieren Sie die erzeugte Datum:

User.find({images:{$ne:[]}}).sort({"images.created":-1})

Leider nicht funktioniert wie ich es brauche. Es sortiert die Benutzer durch die neuesten Bilder, aber noch immer gibt alle Bilder, und es gibt keine Möglichkeit zur Begrenzung der Anzahl der Bilder, die von der Funktion zurückgegeben wird.

Ich begann, mich in das Aggregat, und es scheint, wie es könnte die Lösung sein, den ich Suche, aber ich habe Schwierigkeiten, herauszufinden, wie man es an die Arbeit.

Idealerweise die Art von Ergebnis würde ich gerne zurückgekehrt wäre, wie diese:

results: [
    {
        _id: ObjectID (from Photo)
        name: "Bob"
        url: "http://www.example.com/photo4.jpg"
        created: Date("2013-02-04")
    }
    {
        _id: ObjectID (from Photo)
        name: "Matthew"
        url: "http://www.example.com/photo3.jpg"
        created: Date("2013-02-03")
    }
]

Jedes Ergebnis sollte sein, ein Foto, und ich sollte in der Lage sein, zur Begrenzung der Ergebnisse auf einen bestimmten Betrag, und überspringen Sie die Ergebnisse seitenweise anzeigen.

Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen, und danke für Eure Antworten.

Schreibe einen Kommentar