拆分字符串并使用nodejs转换为json对象

时间:2019-07-01 04:55:56

标签: javascript node.js node-modules

我正在尝试根据查询参数过滤我的数据(mongoDB),如下所示。但是mongoDB不支持比较符号,因此我尝试在发送到find()之前将所有符号转换为适当的查询运算符。

GET /companies/?created_by<2&type<=Subsidiary&modified_by!=3

对于我上面的url req.query如下所示:

{ 'created_by>2': '', // { created_by: { $gt: 2} }
  'type<': 'Subsidiary', // { type: { $lte: Subsidiary } }
  'modified_by!': '3' }  //  { modified_by: { $ne: 3 } }

我在过滤时有六种情况。每当我的数据的特定字段用于过滤时,我都必须将其转换为正确的json。

field=value // { <field>: { $eq: <value> } }
field!=value  // { <field>: { $ne: <value> } }
field<value   // { <field>: { $lt: <value> } }
field>value   // { <field>: { $gt: <value> } }
field<=value  // { <field>: { $lte: <value> } }
field>=value  // { <field>: { $gte: <value> } }

以下是我的两个字段的json对象(此对象可能会根据我的过滤而更改):

{ 
   'created_by>2': '',
   'type<': 'Subsidiary'
}

我想使用nodejs查询参数($ gt,$ lte)将上述json转换为以下格式。

{ 
   created_by: { '$gt': '2' }, 
   type: { '$lte': 'Subsidiary' } 
}

如何使用nodejs进行转换?

1 个答案:

答案 0 :(得分:2)

您可以尝试以下类似方法

var obj= { 
   'created_by>2': '',
   'type<': 'Subsidiary'
}

var result = Object.keys(obj).reduce((acc, el)=> {
var op = ''
if(el.indexOf('>') > -1) {
    op = '>'
} else {
    op ='<'
}
var elCopy = el.split(op)
//console.log(el);

acc[elCopy[0]] = { [op === '>' ? '$gt' : '$lte' ]: elCopy[1] ? elCopy[1] : obj[el] }
return acc;
}, {})

console.log(result)