我在express-graphQL应用程序中使用猫鼬,我有一个问题,其中我的find({})
查询如预期返回,但我无法让我的find({id})
查询返回除null外的任何内容。这种堆栈溢出搜索的最佳结果表明,这是模型上的一个复数化问题,虽然可能是这种情况,但我不相信这是因为我可以使用find-all功能正常工作我的模型的单数用法。这个查询:猫鼬发现可以返回所有,但不只是一个
{
books {
id
}
}
使用此模式:
books: {
type: new GraphQLList(BookType),
resolve() {
return Book.find({});
}
}
返回如下:
{
"data": {
"books": [
{
"id": "507f1f77bcf86cd799439011"
},
{
"id": "507f1f77bcf86cd799439012"
}
]
}
}
相反,该查询返回null
的账面价值:
{
book(id:"507f1f77bcf86cd799439011") {
id
}
}
whe这是我的架构定义:
book: {
type: BookType,
args: { id: { type: new GraphQLNonNull(GraphQLID) } },
resolve(parentValue, { id }) {
return Book.find({ id });
}
},
当我console.log我的id参数在该解析函数,它会返回该预期的id。我试图使用mongoose.Types.ObjectId(id)作为强制它作为一个id而不是一个字符串,但这似乎没有帮助。这就是我的模型的样子,注意我没有定义我的id,并且在我的实际数据库中,id字段被输入为_id
,即使我在查询中调用了id
。
import mongoose from "mongoose";
const Schema = mongoose.Schema;
const BookSchema = new Schema({
name: { type: String },
});
mongoose.model("Book", BookSchema);
编辑:一些更多的研究,我发现,这findOne工作:
Book.findOne({ name: "title" });
,而任一不要:
Book.findOne({ id: "507f1f77bcf86cd799439011" });
Book.findOne({ id });
这清楚地指出了一些问题与我如何格式化我的ID查询,但我不确定究竟是什么。
应该是'Book.findById(id);' – Teh
谢谢,这不能解决它不幸的。 – coherence