Я пытаюсь создать схемы в Mongoose со ссылкой на ObjectId и могу запрашивать их через GraphQL с помощью Apollo Server
Я определил очень простой объектный идентификатор для Book и Author в mongoose, как это
const { ObjectId } = mongoose.Schema.Types;
const AuthorSchema = new mongoose.Schema({
name: String
});
const BookSchema = new mongoose.Schema({
name: String,
author: [{ type: ObjectId, ref: 'Author' }]
});
И с такой схемой graphql
type Author {
id: ID!
name: String
}
type Book {
id: ID!
name: String
author: Author
}
type Query {
authors: [Author]
author(id: ID!): Author
books: [Book]
book(id: ID!): Book
}
input AddAuthorInput {
name: String!
}
input AddBookInput {
name: String!
author: ID!
}
type Mutation {
addAuthor(input: AddAuthorInput): Author
addBook(input: AddBookInput): Book
}
Секция мутаций в resolver для запросов addBook и book выглядит следующим образом
addBook: async (_, args) => {
try {
const {
input
} = args;
return Book.create(input);
} catch (e) {
return e.message
}
}
book: async (_, args) => {
const { id } = args;
const result = await Book.findById(id).populate('author').exec();
console.warn('====== Book query result ======');
console.log(JSON.stringify(result, null, 2));
console.warn('====== End Book query result ======');
return result;
Когда я запрашиваю с этим
query book {
book(id: "xxxxxxx") {
id
name
author {
name
}
}
}
Я получаю нулевое значение в author.name , в то время как из вывода консоли видно, что .populate () смог получить правильный результат из коллекции Authors.
Это репо включает созданный мной пример кода