[英]Mongoose find can return all but not just one
我在express-graphQL應用程序中使用貓鼬,並且遇到一個問題,我的find({})
查詢按預期返回,但是我無法讓我的find({id})
查詢返回除null之外的任何內容。 此類關於堆棧溢出的搜索的最高結果將表明這是模型上的多元化問題,盡管可能是這種情況,但我不相信這是因為我可以使全部查找功能正常工作我模型的單一用法。 該查詢:
{
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 });
}
},
當我在該resolve函數中console.log我的id參數時,它按預期返回ID。 我嘗試使用mongoose.Types.ObjectId(id)作為強制將其作為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查詢的一些問題,但是我不確定到底是什么。
我想到了。 在數據庫中創建樣本文檔時,_id參數的格式非常重要。 我將其格式化為:
"_id": "507f1f77bcf86cd799439011"
實際上,貓鼬正在尋找要格式化的格式:
"_id": {
"$oid": "507f1f77bcf86cd799439011"
},
只需交換數據庫中的這兩個即可立即修復!
答案取決於您的實現,但是這是編寫這樣的行時要注意的事項:
return Book.find({ id });
在已經提到的花括號中,您需要描述鍵和值,而不僅僅是鍵,例如
{id:“ 507f1f77bcf86cd799439011”}
確保它們的密鑰與您系統中的密鑰匹配,例如_id或id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.