gpt4 book ai didi

javascript - mongoose 查找多个条件的记录并检查请求参数是否不为空

转载 作者:太空宇宙 更新时间:2023-11-04 03:30:21 25 4
gpt4 key购买 nike

我是这项技术的新手,并且正在使用使用 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);

每个参数可以为空,对于每个参数我有不同的搜索逻辑(对于参数搜索,我将使用正则表达式同时检查“Nom”和“Description”和“Auteur”字段,对于category和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);
});
};

问题是如何检查从网络服务发送的请求参数是否为空以及如何在搜索记录时在查询中禁用它。我的第二个问题是如何将这些搜索逻辑结合在一起?

最佳答案

我认为您想要的查询的基本结构是:

{
'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 - mongoose 查找多个条件的记录并检查请求参数是否不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38876676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com