【发布时间】:2018-01-20 04:50:33
【问题描述】:
我在 express-graphQL 应用程序中使用 mongoose,我遇到了一个问题,我的 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
}
}
这是我的架构定义:
book: {
type: BookType,
args: { id: { type: new GraphQLNonNull(GraphQLID) } },
resolve(parentValue, { id }) {
return Book.find({ id });
}
},
当我在该解析函数中控制台记录我的 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); -
谢谢,不幸的是,这并没有解决问题。
标签: node.js mongodb mongoose graphql mongoose-schema