我正在尝试根据查询参数过滤我的数据(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进行转换?
答案 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)