1
我將根據email_address,firstname,lastname,type和phone_number處理用戶搜索。
電話號碼搜索將精確搜索與&沒有國家代碼,而其他人將包含&不區分大小寫的搜索。
所以,我寫了下面的代碼。
User.aggregate(
[
{
"$redact": {
"$cond": [
{
"$and": [
{
"$match": {
type: req.body.type,
email_address: new RegExp((req.body.email_address || req.body.any || '').toLowerCase(), "i"),
"firstname": new RegExp((req.body.firstname || req.body.any || '').toLowerCase(), "i") ,
"lastname": new RegExp((req.body.lastname || req.body.any || '').toLowerCase(), "i")
}
},
{
"$or": [
{
"$setIsSubset": [
[
{ "$substr": [ "$phone_number.local_number", 0, -1 ] }
],
[req.body.phone_number, req.body.any]
]
},
{
"$setIsSubset": [
[
{
"$concat": [
{ "$substr": [ "$phone_number.country_code", 0, -1 ] },
{ "$substr": [ "$phone_number.local_number", 0, -1 ] }
]
}
],
[req.body.phone_number, req.body.any]
]
},
{}
]
}
]
},
"$$KEEP",
"$$PRUNE"
]
}
}
],
function(err, users) {
if (err) {
return res.json({ success: false, err: err });
}
res.json({ success: true, users: users });
}
);
但是,當我運行此代碼,我得到「無效的操作符'匹配'」錯誤。
如果我刪除$匹配,它會將req.body值作爲表達式而不是值來計算,併發出「FieldPath」abc'不以$「開頭的類型錯誤。
所以,我希望得到如何解決這個問題和條件搜索的幫助。
請幫幫我!!!
大回答,非常有幫助。 – BigDaddy