преобразовать необработанный запрос в запрос mongodb эффективным способом - PullRequest
0 голосов
/ 03 мая 2020

В приложении nodejs с хранилищем mongodb у меня есть следующий запрос от пользователя:

const rawQuery = [
  '{"field":"ingredient","type":"AND","value":"green and blue"}',
  '{"field":"ingredient","type":"AND","value":"black"}',
  '{"field":"ingredient","type":"OR","value":"pink"}',
  '{"field":"ingredient","type":"OR","value":"orange"}',
  '{"field":"place","type":"AND","value":"london"}',
  '{"field":"school","type":"NOT","value":"fifth"}',
  '{"field":"food","type":"OR","value":"burger"}',
  '{"field":"food","type":"OR","value":"pizza"}',
  '{"field":"ownerFirstName","type":"AND","value":"Jimmy"}'
];

У меня есть коллекция с именем restaurant, и коллекция с названием владельцев.

Будет этот запрос предназначен для обработки такого сценария поиска?

  const query = {
        $and: : [
            { ingredient: 'green and blue' },
            { ingredient: 'black' },
            { $or : [
                    { ingredient: 'pink' },
                    { ingredient: 'orange' },
                ] 
            },
            { place: 'london' },,
            { school: { $ne: 'fifth' } },
            { $or : [
                    { food: 'burger' },
                    { food: 'pizza' },
                ] 
            }
        ]
  };

Как я могу преобразовать rawQuery в этот запрос mon go? (Учитывая, что это должен быть динамический c, потому что у меня много полей, и в этом примере я только включил пару из них.)

Этот пример запроса предназначен для получения ресторанов, которые соответствуют описанию / разместить / ресторан / запросы еды в ресторане, а также, чтобы соответствовать имени владельца из другой коллекции. Каждый документ ресторана будет иметь поле ownerUuid, указывающее на владельца в другой коллекции.

Как лучше всего выполнить поиск в mongodb для такого запроса в рабочей среде?

Как это может быть достигнуто с Elasticsearch?

...