4 Stimmen

Führen einer Mengendifferenz in MongoDB

Ich habe zwei verschiedene Sammlungen mit einem gemeinsamen Feld, zum Beispiel einem Benutzer-ID. Es gibt auch andere Attribute, die die Benutzer-IDs qualifizieren.

Zum Beispiel:

Sammlung 1: {UserId, SellsToUserId}

Sammlung 2: {UserId, BuysFromUserId}

Ich möchte eine Operation ausführen, die mir den Unterschied zwischen zwei Sets zeigt.

Ein Beispiel-Query wäre: Holen Sie alle Benutzer-IDs, denen eine bestimmte Benutzer-ID verkauft, aber nicht von ihnen kauft.

Lösung in Pseudocode

var sellToCursor = collection1.Find(Query.EQ("UserId", Ich)).SetFields({SellsToUserId});

var buyFromCursor = collection2.Find(Query.EQ("UserId", Ich)).SetFields({BuysFromUserId});

SellToButDontBuyFrom[] = sellTo - buyFrom;   //definitiv Pseudocode hier.

Ich möchte dies auf dem MongoDB-Server machen, weil ich große Datensätze habe.

Irgendwelche Vorschläge, dies auf effiziente Weise zu tun?

3voto

Nat Punkte 3569

Sie können dieselbe Logik mit Javascript ausführen und auf dem Server ausführen, aber es wird nicht schneller sein. Wenn Ihr C#-Client eine schnelle Bandbreite zum Server hat, ist es die bessere Wahl. Um es zu optimieren, können Sie beide Abfragen nach SellsToUserId und BuysFromUserId sortieren und jeweils durch zwei Cursor iterieren, ähnlich dem Merge-Sort-Algorithmus, bei dem Sie anhalten können, wenn der sellToCursor das Ende erreicht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X