[英]Mongoose If statement in find query
我試圖做一個find()
但帶有if語句。
我有以下查詢:
Promise.all([
User.find({ $and: [
{ 'type': 'user' },
{ $or: [
{ username: { $regex: String(value), $options: "i" } },
{ firstName: { $regex: String(value), $options: "i" } },
]}
]})
.then(user => user),
User.countDocuments({ 'type': 'user' })
.then(count => count)
])
.then(promiseData => {
return response.status(200).json({ count: promiseData[1] });
}
因此,在Promise中,第一個查詢將查找具有user
類型的所有user
。 我想做的是,如果進行搜索的用戶具有特定的權限,請更改該搜索。
例如,假設一個“管理員”用戶執行搜索,我想向該搜索添加另一個查詢,例如:
User.find({ $and: [
{ 'type': 'user' },
// If the user is an admin => _if(true){ run this }_
{ 'stuff': true },
// end if
{ $or: [
{ username: { $regex: String(value), $options: "i" } },
{ firstName: { $regex: String(value), $options: "i" } },
]}
]})
.then(user => user),
是否可以使用if語句在查詢中添加另一個字段? 我不想運行2個本質上相同的查詢。
您應該嘗試聚合的group
或facet
管道來解決此類需求。
db.users.aggregate([
{
$facet:{
users: [
{
$match: {
eUserType: 'user',
// query related users
}
}
],
admins:[
{
$match: {
eUserType: 'admin',
// query related admins
}
}
],
}
},
{
// chnage format as per your need.
}
])
您可以根據需要獲得結果,然后合並或合並數據。
let query = {
$and: [
{ 'type': 'user' },
{ $or: [
{ username: { $regex: String(value), $options: "i" } },
{ firstName: { $regex: String(value), $options: "i" } },
]}
]
}
/// add your logic
if (req.user.admin) {
query['$and'].push({ 'stuff': true });
console.log('req = ', query)
}
/// execute the request
Promise.all([
User.find(query).then(user => user),
User.countDocuments({ 'type': 'user' }).then(count => count)
])
.then(promiseData => {
return response.status(200).json({ count: promiseData[1] });
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.