簡體   English   中英

查找查詢中的貓鼬If語句

[英]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個本質上相同的查詢。

您應該嘗試聚合的groupfacet管道來解決此類需求。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM