在Apollo GraphQL解析器中使用的父級參數與MongoDB聚合中的$lookup階段用於連接Mongoose模型的比較
<p>我正在使用 Apollo GraphQL 和 Mongoose 開發後端應用程式。我有兩個模型:User 和 Post,它們具有一對多關係(一個用戶可以有多個帖子,但一個帖子屬於一個用戶)。 </p>
<p>我想查詢 GraphQL 架構中的用戶字段,以按用戶 ID 獲取用戶以及屬於該用戶的所有帖子。我還想查詢我的帖子類型中的作者字段以獲取撰寫該帖子的用戶。 </p>
<p>我了解到,有兩種方法可以連接 MongoDB 中不同集合的資料:使用 Apollo GraphQL 解析器中的父參數,或使用 MongoDB 聚合中的 $lookup 階段。 </p>
<p>父參數是一個對象,其中包含從父字段上的解析器返回的結果。父參數可用於存取父欄位或類型中的數據,並將其傳遞給子欄位或類型。例如,我可以使用它來加入貓鼬模型,如下所示:</p>
<pre class="brush:php;toolbar:false;">type User {
id: ID!
name: String
posts: [Post]
}
type Post {
id: ID!
title: String
author: User
}
type Query {
user(id: ID!): User
}
const resolvers = {
User: {
posts(parent, args, context) {
return context.db.Post.find({ author: parent.id });
},
},
};</pre>
<p>$lookup 階段是一個聚合管道階段,它對同一資料庫中的另一個集合執行左外連接。 $lookup 階段可用於將多個集合中的資料合併到單一結果集中。例如,我可以用它來加入這樣的模型:</p>
<pre class="brush:php;toolbar:false;">db.posts
.aggregate([
{
$lookup: {
from: "users",
localField: "author",
foreignField: "_id",
as: "author",
},
},
])
.toArray((err, posts) => {
console.log(posts);
});</pre>
<p>我不確定我的應用程式應該使用哪一個。我想選擇更有效率、可擴展和可維護的選項。 </p>
<p>在 Apollo GraphQL 解析器中使用父參數和在 MongoDB 聚合中使用 $lookup 階段來加入 Mongoose 模型之間的主要差異和權衡是什麼? </p>