Mongoose 中的条件查询,查询中有整数
Conditional query in Mongoose with integers in query
我正在查看这个问题 How to build a conditional query in Mongoose? 并尝试通过处理查询字符串中的整数来构建它。
我有以下代码。
var conditions = {};
var patt = new RegExp('^[0-9]');
for (var key in req.query) {
if (req.query.hasOwnProperty(key)) {
if(patt.test(req.query[key])) {
conditions[key] = new RegExp('^' + parseInt(req.query[key]) + '$', 'i');
}
else {
conditions[key] = new RegExp('^' + req.query[key] + '$', 'i');
}
}
}
当我这样做时 &color=red
这个 returns 颜色等于红色。
但是当我执行 &version=2
等操作时,我什么也没得到。
我在 if 语句中放置了一个控制台日志,以确认 patt
正则表达式正在获取以 int
开头的值,但这似乎确实按照我的预期执行(返回结果 version = 2).
如果我按如下方式重组我的代码,这会部分起作用。然而,这个解决方案并不是真正可维护的,因为我需要为每个潜在参数添加一个条件,并且需要返回并在更多可用时进行修改。
var version = parseInt(req.query.version);
var query = Model.find();
if (version) {
query = query.where('version').equals(version);
}
上面代码片段的另一个问题是,如果我正在寻找一个字符串,例如 title 并且 title 以数字开头,例如 7up,那么这个 returns 也没有结果。
var title= req.query.title;
var query = Model.find();
if (version) {
query = query.where('title').equals(title);
}
有没有我可以在这里使用的解决方案,允许我在请求中使用任何参数,如果它与我的 patt
正则表达式匹配,则将其视为整数?
下面是我的数据模型的一个片段,一旦我可以让它工作,我打算添加更多 numbers
或 strings
的项目
var ModelSchema = new Schema({
version: {
type: Number,
trim: true
},
color: {
type: String,
trim: true
},
title: {
type: String,
trim: true
},
});
mongoose.model('Model', ModelSchema);
如果我按照您的代码进行操作,您似乎在尝试使用正则表达式来搜索查询中的整数,这对我来说没有意义。你有 conditions[key] = new RegExp('^' + parseInt(req.query[key]) + '$', 'i');
但你应该能够简单地拥有 conditions[key] = parseInt(req.query[key]);
很高兴成功了。谢谢!
我正在查看这个问题 How to build a conditional query in Mongoose? 并尝试通过处理查询字符串中的整数来构建它。
我有以下代码。
var conditions = {};
var patt = new RegExp('^[0-9]');
for (var key in req.query) {
if (req.query.hasOwnProperty(key)) {
if(patt.test(req.query[key])) {
conditions[key] = new RegExp('^' + parseInt(req.query[key]) + '$', 'i');
}
else {
conditions[key] = new RegExp('^' + req.query[key] + '$', 'i');
}
}
}
当我这样做时 &color=red
这个 returns 颜色等于红色。
但是当我执行 &version=2
等操作时,我什么也没得到。
我在 if 语句中放置了一个控制台日志,以确认 patt
正则表达式正在获取以 int
开头的值,但这似乎确实按照我的预期执行(返回结果 version = 2).
如果我按如下方式重组我的代码,这会部分起作用。然而,这个解决方案并不是真正可维护的,因为我需要为每个潜在参数添加一个条件,并且需要返回并在更多可用时进行修改。
var version = parseInt(req.query.version);
var query = Model.find();
if (version) {
query = query.where('version').equals(version);
}
上面代码片段的另一个问题是,如果我正在寻找一个字符串,例如 title 并且 title 以数字开头,例如 7up,那么这个 returns 也没有结果。
var title= req.query.title;
var query = Model.find();
if (version) {
query = query.where('title').equals(title);
}
有没有我可以在这里使用的解决方案,允许我在请求中使用任何参数,如果它与我的 patt
正则表达式匹配,则将其视为整数?
下面是我的数据模型的一个片段,一旦我可以让它工作,我打算添加更多 numbers
或 strings
var ModelSchema = new Schema({
version: {
type: Number,
trim: true
},
color: {
type: String,
trim: true
},
title: {
type: String,
trim: true
},
});
mongoose.model('Model', ModelSchema);
如果我按照您的代码进行操作,您似乎在尝试使用正则表达式来搜索查询中的整数,这对我来说没有意义。你有 conditions[key] = new RegExp('^' + parseInt(req.query[key]) + '$', 'i');
但你应该能够简单地拥有 conditions[key] = parseInt(req.query[key]);
很高兴成功了。谢谢!