2017-02-19 3 views
1

Ich versuche die Aggregation Pipeline auf mongodb zu verwenden, um 3 zufällige Dokumente abzurufen.

$sample sah ideal zu sein, außer die zurückgegebenen Dokumente nicht eindeutig zuzuordnen sind garantiert.

Haben Sie Ideen, wie Sie 3 eindeutige Dokumente als Antwort generieren können? Ich vermute, es würde eine weitere Nutzung der Aggregationspipeline erfordern, auf eine Art und Weise, von der ich mir nicht sicher bin.

Das ist natürlich davon aus, dass es 3 oder mehr Dokumente in der Sammlung.

Danke.

Antwort

1

Was Sie tun konnten, ist mehr Daten anfordert, sagen sie mal 100 $sample ‚d Dokumente, Gruppe dieser Dokumente von _id Duplikate zu entfernen (für Einzigartigkeit) und begrenzen die Ausgabe auf die gewünschte Dokumentanzahl:

db.test.aggregate([{ 
    $sample: { size: 100 } 
}, { 
    $group: { 
     _id: "$_id", 
     document: { $push: "$$ROOT" } 
    } 
}, { 
    $limit: 3 
}]) 
+0

Vielen Dank für Ihre Antwort. Das geht davon aus, dass meine Sammlung von Größe 100 oder größer ist, in Wirklichkeit bin ich eigentlich meine Sammlung von 0 wachsen und möchte die 3 Dokumente für jeden neuen Eintrag abrufen. Ich bin mir bewusst, dass bedeutet, die ersten 3 Einträge als Sonderfall zu behandeln ... Weitere Ideen? Vielen Dank – Adam

0

Es scheint, dass diese Frage auf einer falschen Annahme basiert, basierend auf der Art, wie ich getestet habe.

$sample gibt eindeutige Einträge zurück, per Definition habe ich einfach die gleichen Anfragen gepostet und nicht realisiert, dass die Datenbank mit dieser Anfrage überbevölkert wurde. Bei der Untersuchung waren die objectIDs tatsächlich einzigartig und lösten somit das Problem (das zugegebenermaßen gar nicht existierte).