Как я могу фильтровать документы mongodb, сохраненные с помощью флажков?

#node.js #mongodb #express

#node.js #mongodb #экспресс

Вопрос:

Я создаю приложение, используя node.js MongoDB и express. У меня есть коллекция, в которой указаны как страны, так и способы внесения депозита. Прямо сейчас я ввожу данные, используя флажки, когда имя «country [country]», а [country] представляет цикл массива с именем country со всем миром. то же самое для параметров депозита.

и результат выглядит так :

 { "_id" : 
ObjectId("), 
"country" : [ { "Germany" : "on" , "France" : "on, etc} ],
"deposit" : [ { "paypal" : "on", "visa" : "on" etc } ],
   }, 
"__v" : 0 }
 

В конце концов, мне нужно, чтобы кто-то мог использовать фильтры для выбора нескольких стран, вариантов пополнения счета и других вещей для фильтрации результатов.

До сих пор мне удавалось использовать /location?страна = Германия и dm = paypal

 router.get("/location", function(req, res) {
  var country = req.query.country;
  var depositMethod = req.query.dm;

if (country === undefined) {
    country = ''
  } else {
   country = 'country.' country;
  };

  // check if there is deposit query
    if (depositMethod === undefined) {
    depositMethod = ''
  } else {
    depositMethod = 'deposit.' depositMethod;
  };


db.casinos.find( { $and: [ { [country] :"on" }, { [depositMethod] :"on" } ] } )
 

Чтобы найти документы, у которых есть оба запроса, также удалось получить каждый из них отдельно, используя $ или.

Что мне действительно нужно, так это иметь возможность делать и то, и другое, а также иметь возможность масштабировать страны и методы внесения на многие другие варианты, цены или что угодно…

без написания десятков маршрутов.

Надеюсь, кто-нибудь может помочь.

И извините, если этот вопрос уже был задан, я изо всех сил старался найти ответ, прежде чем отправлять этот вопрос

Комментарии:

1. Не очень хорошая структура. Сделайте что-то вроде "country" : [ { "name": "Germany", "selected": true }, { "name": "France", "selected": true }, { "name": "Spain", "selected": false }] или даже просто "country" : ["Germany", "France"] , если вам сойдет с рук только перечисление «выбранных». Использование имен ключей в качестве точек данных — ужасный антипаттерн при работе с базой данных, которая считывает значения , а не «ключи».

2. Спасибо за эту ссылку. Я успешно изменил значения на [«Германия», «Франция»], как было предложено, в то время как ключ — страна. Однако это все равно не помогает мне с перекрестной проверкой значений для и / если . Есть мысли по этому вопросу?