Vergleich der im Apollo GraphQL-Resolver verwendeten übergeordneten Parameter mit der $lookup-Phase in der MongoDB-Aggregation zum Verbinden von Mongoose-Modellen
<p>Ich entwickle eine Backend-Anwendung mit Apollo GraphQL und Mongoose. Ich habe zwei Modelle: Benutzer und Beitrag, die eine Eins-zu-Viele-Beziehung haben (ein Benutzer kann mehrere Beiträge haben, aber ein Beitrag gehört einem Benutzer). </p>
<p>Ich möchte das Feld „Benutzer“ in einem GraphQL-Schema abfragen, um einen Benutzer anhand der Benutzer-ID und aller zu diesem Benutzer gehörenden Beiträge zu erhalten. Ich möchte auch das Feld „Autor“ in meinem Beitragstyp abfragen, um den Benutzer zu ermitteln, der den Beitrag geschrieben hat. </p>
<p>Ich habe erfahren, dass es zwei Möglichkeiten gibt, Daten aus verschiedenen Sammlungen in MongoDB zusammenzuführen: die Verwendung des übergeordneten Parameters im Apollo GraphQL-Resolver oder die Verwendung der $lookup-Stufe in einem MongoDB-Aggregat. </p>
<p>Der übergeordnete Parameter ist ein Objekt, das die vom Parser für das übergeordnete Feld zurückgegebenen Ergebnisse enthält. Übergeordnete Parameter können verwendet werden, um auf Daten aus einem übergeordneten Feld oder Typ zuzugreifen und diese an ein untergeordnetes Feld oder einen untergeordneten Typ zu übergeben. Ich kann es zum Beispiel verwenden, um einem Mungo-Modell wie diesem beizutreten: </p>
<pre class="brush:php;toolbar:false;">type User {
Ich tat!
Name: Zeichenfolge
Beiträge: [Beitrag]
}
Typ Beitrag {
Ich tat!
Titel: String
Autor: Benutzer
}
Typ Abfrage {
user(id: ID!): Benutzer
}
const Resolver = {
Benutzer: {
Beiträge(Parent, Argumente, Kontext) {
return context.db.Post.find({ author: parent.id });
},
},
};</pre>
<p>Die $lookup-Stufe ist eine Aggregationspipeline-Stufe, die einen linken äußeren Join mit einer anderen Sammlung in derselben Datenbank durchführt. Die Phase „$lookup“ kann verwendet werden, um Daten aus mehreren Sammlungen in einem einzigen Ergebnissatz zusammenzuführen. Ich kann es zum Beispiel verwenden, um einem Modell wie diesem beizutreten: </p>
<pre class="brush:php;toolbar:false;">db.posts
.Aggregat([
{
$lookup: {
von: "Benutzer",
localField: "Autor",
ForeignField: "_id",
als: "Autor",
},
},
])
.toArray((err, posts) => {
console.log(Beiträge);
});</pre>
<p>Ich bin mir nicht sicher, welches ich für meine Bewerbung verwenden soll. Ich wollte eine effizientere, skalierbarere und wartbarere Option wählen. </p>
<p>Was sind die Hauptunterschiede und Kompromisse zwischen der Verwendung übergeordneter Parameter in Apollo GraphQL-Resolvern und der Verwendung der $lookup-Stufe in MongoDB-Aggregationen zur Verknüpfung von Mongoose-Modellen? </p>