Сопоставить частичный запрос с регулярным выражением mongoose между двумя коллекциями - PullRequest
1 голос
/ 01 октября 2019

У меня есть две коллекции, я только включил соответствующие поля. Список коллекции

 ListSchema = new Schema({
  location: {
    zip: Number,
    city: String,
    province: String,
    address: String
  }
})

Коллекция аддонов

AddonSchema = new Schema({

  extra_loc: {
    type: Array
  }
})

Я хочу найти, присутствует ли данная частичная строка в location fields или extra_loc, и вернуть Listэто соответствует. Мой текущий код соответствует только location fields. это дает мне желаемый результат, если он находит совпадение. Но с правильным запросом, который должен соответствовать элементу в extra_loc, возвращается пустой массив.

версия mongoose: 5.7.1,

 List.aggregate([
        {
            $lookup:
            {
                from: "addons",
                localField: "location",
                foreignField: "extra_loc",
                as: "extras"
            }
        },
        {
            $match: {
                $or: [
                    {
                        "location.zip": {
                            $regex: query,
                            '$options': 'i'
                        }
                    },
                    {
                        "location.city": {
                            $regex: query,
                            '$options': 'i'
                        }
                    },
                    {
                        "location.province": {
                            $regex: query,
                            '$options': 'i'
                        }
                    },
                    {
                        "location.address": {
                            $regex: query,
                            '$options': 'i'
                        }
                    },
                    {
                        'extras.extra_loc': {
                            $in: [query]
                        }
                    }
                ]
            }
        }

    ], (err, data) => {
        if (err) {
            return res.json(err)
        }

        List.populate(data, { path: 'feature', select: 'geometry type' }, (err, populatedData) => {
            if (err) {
                return res.json(err)
            }

            if (populatedData) {
                res.json(populatedData)
            }
        })
    });

Я ожидаю, что код даст мне совпадение, если мойзапрос соответствует элементу в extra_loc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...