我有两个集合:
dbPosts
id: mongoose.Schema.Types.ObjectId,
title: { type: String },
content: { type: String },
excerpt: { type: String },
slug: { type: String },
author: {
id: { type: String },
fname: { type: String },
lname: { type: String },
}
dbAuthors
id: mongoose.Schema.Types.ObjectId,
fname: { type: String },
lname: { type: String },
posts: [
id: { type: String },
title: { type: String }
]
我解决我的笔者查询,如下所示:
Query: {
authors: (parent, root, args, context) => {
return dbAuthor.find({});
},
author: (root, args, context) => {
return dbAuthor.findById(args.id);
},
},
Author: {
posts: (parent) => {
if(parent.posts) {
return parent.posts;
} else {
return dbAuthor.find({'author.id': parent.id});
}
},
}
我解决这样的原因是由非规范化我的关系,以优化我的MongoDB的请求。 这里的目标:
如果你仅仅需要一个与他们的作品的标题作者的名单,所有必要的字段在dbAuthors在那里,所以无需查找dbPosts。 但是,如果你需要对每个岗位的详细信息返回,说,摘编或蛞蝓,你抬头dbPosts以下条件:
{'author.id': parent.id}
但问题是,如果您的查询看起来是这样的:
authors(id: "3") {
fname
lname
posts {
title
excerpt
}
}
它打破了,因为没有excerpt
的父对象返回现场。 这个问题可以,如果有一种方法,我可以决定被查询哪些领域对作者的帖子字段,然后决定是否值父返回就够很容易固定。 如果没有,我会再继续查找与价值作者的ID dbPosts。 可能吗? 因为如果不是,它会破坏你的反规范化收集的全部目的,一些蒙戈强烈敦促你这样做!