如何在mongodb查询中使用变量作为字段值?

时间:2018-11-14 12:12:55

标签: node.js mongodb

如何使用search_key变量代替静态值BRO作为字段值

if(search_key!=''){

  dbo.collection("assets").aggregate([
    { 
      "$match": {  $and: [ { status: 1 }, { $or: [ { maker_name : /^.*BRO.*$/i }, { serial_number : /^.*BRO.*$/i  } ] } ] }
    },  
    {
      $lookup:
       {
         from: 'asset_type',
         localField: 'asset_type',
         foreignField: 'asset_type_id',
         as: 'asset_type_details'
       }
     }
    ]).sort({_id:-1}).toArray(function(err, result) {
    if (err) throw err;
    res.status(200).json({'return_data': result });
    db.close();
  });

}

3 个答案:

答案 0 :(得分:0)

我们需要将字符串传递给函数。因此我们可以简单地通过传递查询字符串来更改它。

9.4.13.v20181111

答案 1 :(得分:0)

尝试这样:

        if(search_key!=''){
            let query_string = "/^.*" + search_key + ".*$/i" // we are creating the query string here
            dbo.collection("assets").aggregate([
                { 
                    "$match": {  $and: [ { status: 1 }, { $or: [ { maker_name : query_string }, { serial_number : query_string } ] } ] }
                },  
                {
                    $lookup:
                     {
                       from: 'asset_type',
                       localField: 'asset_type',
                       foreignField: 'asset_type_id',
                       as: 'asset_type_details'
                     }
                 }
                ]).sort({_id:-1}).toArray(function(err, result) {
                if (err) throw err;
                res.status(200).json({'return_data': result });
                db.close();
            });

        }

答案 2 :(得分:0)

尝试这种方式

{ serial_number: { $regex: `${search_key}.*`, $options: 'i' } }

也将同样的东西用于maker_name

这对我有用。