【发布时间】:2020-08-10 03:22:31
【问题描述】:
我是猫鼬的新手,目前我正在编写一个应用程序来学习它。我有一个艺术家模式和一个使用多个可选字段进行搜索的表单。例如,用户可以输入姓名、最小年龄并在模型中进行搜索,而无需填写其他表单字段。
在控制器上,我通过 req.body 对象从表单中获取所有字段,并且我有一个查询对象,它带有多个 if 语句,我检查属性是否未定义,如果不是,我将其放入对象作为属性,并将对象传递给 find 方法。
问题是当我填写最小年龄并将此属性query.min_age = { $gte: min_age} 放入查询对象时,$gte 会转换为字符串,因此无法正确运行 find 方法。
猫鼬模型
const mongoose = require("mongoose");
const AlbumSchema = require("./album")
const CompanySchema = require("./company")
const Schema = mongoose.Schema;
const ArtistSchema = new Schema({
name: String,
age: Number,
yearsActive: Number,
albums: [AlbumSchema],
company:[{type: Schema.Types.ObjectId, ref: "Company"}]
});
const Artist = mongoose.model("artist", ArtistSchema);
module.exports = Artist;
控制器
app.post("/", (req, res, next) => {
const name = req.body.name;
const min_age = req.body.min_age;
const min_active = req.body.min_active;
const sort = req.body.sort;
const query = {};
if(name) {
query.name = name;
}
if(min_age) {
query.min_age = { $gte: min_age};
}
if(min_active) {
qyery.min_active = {gte: min_active};
}
Artist.find(query).
sort(sort)
.then( artists => {
res.render("index", {
artists: artists
})
});
});
【问题讨论】:
标签: javascript node.js mongodb express mongoose