2017-02-28 1 views
0

Ich habe zwei Sammlungen von Adressen. Sammlung # 1 enthält Namen und die Adresse von Kunden sowie eine eindeutige Kennung.Hinzufügen von Informationen aus einem Dokument zu einem anderen, wenn die eindeutige Kennung

Sammlung # 2 enthält die gleiche eindeutige Kennung und die Telefonnummer des Kunden.

Sammlung # 2 mit der Telefonnummer ist kleiner als Sammlung # 1.

Was ich jetzt tun möchte, ist MongoDB die Telefonnummer aus Sammlung # 2 zu den passenden Dokumenten in Sammlung # 1 nur hinzufügen, wenn die eindeutige Kennung auch übereinstimmt. Ansonsten sollte das Dokument einfach übersprungen werden und zum nächsten übergehen. Am Ende brauche ich Sammlung # 2 mit der hinzugefügten Telefonnummer oder keine Nummer, wenn sie einfach nicht da wäre.

Gibt es einen einfachen Weg, dies überhaupt zu tun?

+0

Verwenden [$ Lookup] (https://docs.mongodb.com/manual/reference/operator/aggregation/lookup /) – Veeram

+0

Bitte geben Sie einige Beispiele an. – gba

Antwort

4

Es gibt zwei Möglichkeiten, wie Sie dieses Problem nähern können:

  1. Wenn Sie mit mongoDB Version 3.2 und weitere können Sie die $lookup Aggregation verwenden.

    db.address1.aggregate([ 
    { 
        $lookup: 
        { 
         from: "address2", 
         localField: "unique_field_name", 
         foreignField: "unique_field_name", 
         as: "telephone" 
        } 
    }]) 
    

diese Aggregation Lauf fügt das passende Dokument aus address2 als eingebettetes Dokument address1. Es fügt dieses eingebettete Dokument allen Dokumenten in Adresse1 hinzu, selbst wenn in Adresse2 kein übereinstimmendes Dokument vorhanden ist.

  1. Die zweite Option ist das folgende Skript ausführen:

    db.address2.find().forEach(
        function(address2){ 
        var doc = db.address1.findOne({"unique_identifier":address2.unique_identifier}) 
        db.address1.update({_id: doc._id}, {$set: {telephone: address2. telephone}}) 
    }) 
    
Verwandte Themen