我注意到 node、express 和 mongo 驅動程式如果 req.query.x/y... 未定義,它會在搜索程序中回傳無效!例子:
//req.query.name
//req.query.email
//req.query.city
var search = req.query.search; //used in the main serch box
//used as secondary textbox filters
if(req.query.name){
var name = req.query.name;
}
if(req.query.email){
var email= req.query.email;
}
if(req.query.city){
var city= req.query.city;
}
在搜索多個文本框時,我想盡可能地消除 if 條件!
在.ejs
//textbox filter
<input type="text" name="name">
<input type="text" name="email">
<input type="text" name="city">
在 .js 中
collection.find({
$text: {$search: search},
or:[{
name:{$regex: '^' name},
email:{$regex: '^' email},
city:{$regex: '^' city}}
]
}).toArray(function.......
我對代碼進行了大量簡化以了解情況(但我認為問題與$andor$or及其結構|位置無關)!但是如果的搜索條件中的一個不確定我沒有得到期望的結果,我想了解是否可以排除 city或name或email在案件沒有分配的值!我怎么辦?我無法使用,req.query因為它匹配更高的搜索框。簡而言之,這三個框將從文本中過濾req.query.search
我試過了,但沒有成功:
if(name == undefined ){
name ="";}
if(email == undefined{
email="";}
if(city==undefined){
city="";}
感謝任何回答我的人
uj5u.com熱心網友回復:
您可以創建過濾器物件,然后根據未定義的屬性將它們傳遞給它;你可以這樣試試:
const {
search,
name,
email,
city,
} = req.query;
const filter = {
$text: { $search: search },
$or: [],
};
if (name) filter.$or.push({ name: new RegExp(name, 'i') }); // The 'i' flag is just for example purpose, that's all
if (name) filter.$or.push({ email: new RegExp(email, 'i') }); // same here
if (name) filter.$or.push({ city: new RegExp(city, 'i') }); // same here
const result = await collection.find(filter);
PS:您使用 $text 關鍵字,我不知道您是否在 Mongoose 架構定義中添加了文本索引,以便您在查找查詢中使用 $text 運算子來搜索文本索引中包含的所有欄位。您可以在此處閱讀更多相關資訊。
uj5u.com熱心網友回復:
謝謝你的建議,看來我是這樣解決的(希望沒有什么能逃過我的)
var search = req.query.search; //used in the main serch box
//used as secondary textbox filters
if(req.query.name){
var name = req.query.name;
}
else if(name === undefined){name ="";}//add this
if(req.query.email){
var email= req.query.email;
}
else if(email === undefined){email="";}//add this
if(req.query.city){
var city= req.query.city;
}
else if(city === undefined){city="";}//add this
如果有更好的方法,那就去吧!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/370565.html
標籤:javascript 节点.js MongoDB 表达
上一篇:貓鼬不要將物件插入陣列
