我有這個架構:
const SoundSchema = new Schema({
name: {
type: String,
required: true
},
minFrec: {
type: Number,
required: true
},
maxFrec:{
type: Number,
required: true
},
minInt:{
type: Number,
required: true
},
maxInt:{
type: Number,
required: true
},
category: {
type: String,
lowercase: true,
required: true,
enum: ["Hogar", "Naturaleza", "Conversación", "Ocio", "Lugares", "Ciudad"]
}
});
我正在嘗試創建此路線以顯示與某個類別匹配的所有專案:
app.get("/sounds/:category", async (req, res) => {
const sounds = await Sound.find({ category: 'Ocio' }).sort({ name: 'asc'});
res.render("sounds/category", { sounds });
});
它不起作用(回傳一個空陣列),但如果我按沒有“列舉”(名稱、minInt 等)的內容進行過濾,它會起作用。
我已經完成了其他可行的路線,我可以在 mongo 中找到這些專案(db.sounds.find({category: "Ocio"}))。
uj5u.com熱心網友回復:
您的架構將欄位定義category為lowercase: true這意味著字串將以小寫形式保存(檔案)
因此,您必須在查詢中使用小寫字母以匹配確切的值。
const sounds = await Sound.find({ category: 'ocio' }).sort({ name: 'asc'});
或者更全球化的東西:
const sounds = await Sound.find({ category: req.params.category.toLowerCase() }).sort({ name: 'asc'});
甚至另一種選擇是像這個例子一樣使用$regexwith 選項,但考慮到您的架構確保該欄位是小寫的,這是一個更昂貴的選擇。所以使用是一個更好的選擇。itoLowerCase()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/386299.html
標籤:javascript 节点.js MongoDB 表达 猫鼬
