我正在尝试执行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] });
}
因此,在承诺中,第一个查询将找到所有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个本质上相同的查询。
答案 0 :(得分:0)
您应尝试使用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.
}
])
一旦获得结果,您便可以根据需要进行合并或合并以格式化数据。
答案 1 :(得分:0)
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] });
}