Результаты фильтрации Mongodb с уникальным значением - PullRequest
1 голос
/ 07 мая 2020

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

Я пытаюсь выполнить запрос по всем городам, начинающимся с «Сан», например, и хочу отфильтровать результаты, в которых Сан-Антонио отображается только один вместе с любыми другими городами, начинающимися с Сан.

Вот код, который я использую:

Zipcodes.find(
  { city: { $regex: /San/, $options: 'i' } },
  (err, result) => {
    if (err) {
      return res.send({ error: err });
    }
    res.send({ data: result });
  },
).limit(20);

Это дало мне следующие результаты:

  {
        "loc": [
            -94.132581,
            31.515173
        ],
        "_id": "75972",
        "city": "SAN AUGUSTINE",
        "pop": 5916,
        "state": "TX"
    },
    {
        "loc": [
            -98.730929,
            31.162678
        ],
        "_id": "76877",
        "city": "SAN SABA",
        "pop": 4023,
        "state": "TX"
    },
    {
        "loc": [
            -100.481752,
            31.478165
        ],
        "_id": "76901",
        "city": "SAN ANGELO",
        "pop": 23800,
        "state": "TX"
    },
    {
        "loc": [
            -100.480036,
            31.419411
        ],
        "_id": "76904",
        "city": "SAN ANGELO",
        "pop": 25535,
        "state": "TX"
    },
    {
        "loc": [
            -100.390005,
            31.464738
        ],
        "_id": "76905",
        "city": "SAN ANGELO",
        "pop": 11284,
        "state": "TX"
    },
    {
        "loc": [
            -100.438586,
            31.470735
        ],
        "_id": "76903",
        "city": "SAN ANGELO",
        "pop": 32471,
        "state": "TX"
    },
    {
        "loc": [
            -95.034496,
            29.466033
        ],
        "_id": "77539",
        "city": "SAN LEON",
        "pop": 21905,
        "state": "TX"
    },
    {
        "loc": [
            -99.427148,
            27.062523
        ],
        "_id": "78067",
        "city": "SAN YGNACIO",
        "pop": 871,
        "state": "TX"
    },
    {
        "loc": [
            -98.460127,
            29.414799
        ],
        "_id": "78203",
        "city": "SAN ANTONIO",
        "pop": 7261,
        "state": "TX"
    },
    {
        "loc": [
            -98.525967,
            29.422855
        ],
        "_id": "78207",
        "city": "SAN ANTONIO",
        "pop": 58355,
        "state": "TX"
    },
    {
        "loc": [
            -98.5063,
            29.400217
        ],
        "_id": "78204",
        "city": "SAN ANTONIO",
        "pop": 11526,
        "state": "TX"
    },
    {
        "loc": [
            -98.479338,
            29.441338
        ],
        "_id": "78215",
        "city": "SAN ANTONIO",
        "pop": 1264,
        "state": "TX"
    },
    {
        "loc": [
            -98.545219,
            29.358366
        ],
        "_id": "78211",
        "city": "SAN ANTONIO",
        "pop": 30417,
        "state": "TX"
    },
    {
        "loc": [
            -98.492509,
            29.423711
        ],
        "_id": "78205",
        "city": "SAN ANTONIO",
        "pop": 1714,
        "state": "TX"
    },
    {
        "loc": [
            -98.497511,
            29.533387
        ],
        "_id": "78216",
        "city": "SAN ANTONIO",
        "pop": 30435,
        "state": "TX"
    },
    {
        "loc": [
            -98.419444,
            29.539525
        ],
        "_id": "78217",
        "city": "SAN ANTONIO",
        "pop": 27925,
        "state": "TX"
    }

Сан-Антонио возвращается много раз. Мне нужны только одни.

Пожалуйста, помогите с правильным запросом. Спасибо.

1 Ответ

0 голосов
/ 07 мая 2020

Вы можете использовать $ group + $ replace Root, чтобы получить значения, уникальные city:

db.collection.aggregate([
    {
        $match: { city: { $regex: "San", $options: "i" } }
    },
    {
        $group: {
            _id: "$city",
            doc: { $first: "$$ROOT" }
        }
    },
    {
        $replaceRoot: {
            newRoot: "$doc"
        }
    }
])

Mon go Детская площадка

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