2016-04-18 19 views
0

Vielen Dank im Voraus für Ihre Hilfe Ich habe zwei Sammlungen und ich mag den Unterschied zwischen einem Satz von Werten eines bestimmten Feld finden I $ Spiel versucht, aber es nichtUnterschied zwischen den Sammlungen in mongodb 3.2

funktioniert Beispiel

Sammlung A:

/*1/ 
{ 
    { "Origin" : "xx", 
    "Destination" : "yy", 
    "Duration" : 180} 
/*2/ 

..... 

} 

Sammlung B

/*1/ 
{ 
    { "Origin" : "xz", 
    "Destination" : "yy", 
    "Duration" : 20, 
     "Departure time ": 21:00, 
     "Arrival time " : 21:20} 
/*2/ 
.... 
} 

Ich möchte den gemeinsamen Ursprung und das Ziel zwischen den beiden Sammlungen erhalten. Erwartete Ausgabe:

/*1/ 
    { 
     { "Origin" : "xx", 
     "Destination" : "yy", 
     } 
    /*2/ 

    ..... 

} 

Ich habe versucht, diese aber es funktioniert nicht:

db.A.aggregate([ 
{ $lookup: 
{ from: "B", localField: "origin", localField : "destination", foreignField: "origin", foreignField : "destination", as: "flight_docs" } } ]) 

Antwort

1

Es gibt ein paar Probleme mit der Aggregation. Vor allem zählt die Groß- und Kleinschreibung. Zweitens sollten Sie nicht zwei lokale Felder und zwei fremde Felder haben. Das zweite Feld überschreibt das erste. Ich würde erwarten, dass Ihre Abfrage wie folgt aussehen:

db.stack.aggregate(
    [{ 
    $lookup: { 
     "from": "B", 
     "localField": "Destination", 
     "foreignField": "Destination", 
     "as": "flight_docs" 
    } 
    }] 
); 

, die ein Ergebnis wie folgt aus (die lokale Dokument mit allen ausländischen Dokumente durch Anpassung der Zielfeld gefunden) geben würde:

{ 
    "_id" : ObjectId("571546c7b9c99e9977f7d372"), 
    "Origin" : "xx", 
    "Destination" : "yy", 
    "Duration" : NumberInt(180), 
    "flight_docs" : [ 
     { 
      "_id" : ObjectId("5715470eb9c99e9977f7d376"), 
      "Origin" : "xz", 
      "Destination" : "yy", 
      "Duration" : NumberInt(20) 
     } 
    ] 
} 
+0

Danke so viel :) – MAYA

Verwandte Themen