Проблема с сопоставлением и извлечением данных в MongoDB при выполнении запросов к массиву - PullRequest
1 голос
/ 26 февраля 2020

Я хочу получить данные из MongoDB. Так как я новичок в Node.Js и MongoDB. Я не могу получить данные.

Я передаю первичную категорию и вторичную категорию в API, где я хочу сопоставить первичную и вторичную категорию с полем массива "category", имеющим два индекса 0 и 1, в первичной категории индекса 0 есть, а в индексе 1 вторичные категории разделены ~.

Ниже приведен мой код для получения данных в соответствии с основной категорией, но я хочу получить данные путем сопоставления первичная и вторичная категория из БД.

ProductModel
.find({ category : { $all : [req.body.primary] }})
.select('id link brand title description category image images in_stock price sale_price merchant_number part_number GroupID status promotion attributes tags currency updated -_id')
.then((productList) => {
  response.status = 200;
  response.msg = 'Success';
  response.count = productList.length;
  response.data = productList
  res.json(response);
})
.catch(() => {
  response.status = 500;
  response.msg = 'connection error';
  response.data = [];
  res.json(response);
});

Пример Do c:

Database structure screenshot

Поэтому я хотел ввести что-то вроде ['Health','women'] и получить документы, в которых есть все эти элементы в массиве категорий, что-то вроде регулярного поиска по элементам массива.

Может ли кто-нибудь помочь мне получить данные из базы данных.

1 Ответ

2 голосов
/ 26 февраля 2020

Если вам нужно запросить с вводом как ['Health', 'women'] и получить документы, которые есть в обоих списках, а также получить документы, которые имеют что-то вроде этого: category : ["Health", "tes~men~women"], тогда вы можете попробовать выполнить запрос ниже:

Запрос:

db.collection.find({
  $and: [
    {
      category: {
        $in: [
          /\bwomen\b/
        ]
      }
    },
    {
      category: {
        $in: [
          "Health"
        ]
      }
    }
  ]
})

Js Код:

const secondary = req.body.secondary
const primary = req.body.primary
db.collection.find({
    $and: [
        {
            category: {
                $in: [
                    new RegExp(`\\b${secondary}\\b`, 'i')
                ]
            }
        },
        {
            category: {
                $in: [
                    primary
                ]
            }
        }
    ]
})
...