Разбейте строку и преобразуйте в объект json, используя nodejs - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь отфильтровать свои данные (mongoDB) на основе параметров запроса, которые я буду отправлять в API, как показано ниже.Но 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'
}

Я хочу преобразовать указанный выше json в формат ниже с параметрами запроса nodejs ($ gt, $ lte).

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

Как преобразовать с использованием nodejs?

1 Ответ

2 голосов
/ 01 июля 2019

вы можете попробовать что-то вроде ниже,

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...