猫鼬查找具有多个条件的记录并检查请求参数是否为空
mongoose finding records with multiple conditions and checking if the request parameter not empty
我是这项技术的新手,使用Mongoose和MongoDB 3.3的Node和Express服务器。我有一个文档集合的以下模式:
exports.schemaLivre = new mongoose.Schema({
Id : Number,
Nom: { type: String, maxlength: 50 },
Auteur: String,
Description: String,
Categorie: String,
}
exports.Livre = mongoose.model('Livre', schemas.schemaLivre);
我正在尝试运行一个有3个参数的web服务。
app.get('/Livres/search=:search&category:=category&auteur=:auteur', controller.RecupererLivresMultiple);
每个参数可以为空,对于每个参数我有不同的搜索逻辑(对于参数搜索,我将使用regex表达式同时检查"Nom"answers"Description"answers"Auteur"字段,对于类别和Auteur,提交的值必须等于字段的内容)。我将需要类似的东西,但我没有找到正确的查询。
exports.RecupererLivresMultiple = function (req, res) {
var re = new RegExp(req.params.search, 'i');
models.Livre.find($and: [
{
$or: [
{ 'Auteur': req.params.auteur },
]
},
{
$or: [
{ 'Category': req.params.Category },
]
}
]).or([{'Nom': {$regex: re}}, {'Auteur': {$regex: re}},{'Description':{$regex: re}}]).exec(function (err, livres) {
if (err) {
return console.error(err);
}
res.json(livres);
});
};
问题是如何检查从web服务发送的请求参数是空的,以及在搜索记录时如何在查询中禁用它。我的第二个问题是如何将这些搜索逻辑组合在一起?
我想你的查询的基本结构是:
{
'Auteur': req.params.auteur,
'Categorie': req.params.category,
$or: [
{ 'Auteur': re},
{ 'Categorie': re},
{ 'Nom': re},
]
}
要使每个参数都是可选的,您可以这样做来构建查询:
// create empty query
var findJSON = {
};
// append criteria if parameters present
if (req.params.auteur){
findJSON.Auter = req.params.auter
}
if (req.params.category){
findJSON.Categorie = req.params.category
}
if (req.params.search){
var re = new RegExp(req.params.search, 'i');
findJSON.$or = [
{ 'Auteur': re},
{ 'Categorie': re},
{ 'Nom': re},
];
}
models.Livre.find(findJSON).exec(function (err, livres) {
if (err) {
return console.error(err);
}
res.json(livres);
});
因为每个参数都是可选的,所以应该处理没有提供参数的情况。你可以这样做:
if(req.params.auteur || req.params.category || req.params.search){
models.Livre.find(findJSON).exec(function (err, livres) {
if (err) {
return console.error(err);
}
res.json(livres);
});
} else {
res.json([]);
}
您可能还想以不同的方式处理错误条件。正如您现在所拥有的,如果find()返回一个错误,您实际上并没有写入响应。
相关文章:
- JavaScript代码未正确检查ajax请求
- 如何请求确认删除检查表项目
- Ajax错误检查-如果Ajax请求失败,如何防止内容发生更改
- 检查请求的用户是否是django中的所有者
- 在不执行ajax请求的情况下,使用jQuery读取HTTP标头以检查404
- 如何检查是否向特定的外部网页发出了请求
- 多久向服务器发送一次Http请求以检查更新?(Ajax)
- jQuery检查flash请求
- 如何检查AJAX请求是否已完成
- 如何检查请求查询值是否为空,例如“”
- ajax-如果我在URL上发送ajax请求,我可以在php页面中检查它是请求还是页面已被打开
- 检查 parse.com 请求对象
- 检查 HTTP GET 请求返回的文件类型
- 检查 ajax 请求是否在大多数情况下失败
- 如何使用 Restangular 检查两个同时请求的完成情况
- 如何在 onsubmit 事件中检查请求类型(ajax 或 no)
- 检查请求是否来自网络而不是手动
- Mongodb 找到一个,但首先检查请求是否为空
- 如何在javascript/jquery中检查html5视频的全屏请求
- 使用Ajax请求检查会话