Предположим, у меня есть коллекция Student:

{
    name: "ABC",
    age: 10,
    address {
        city: "CITY1",
        state: "STATE",
    }
}

{
    name: "DEF",
    age: 11,
    address {
        city: "CITY2",
        state: "STATE",
    }
}

{
    name: "ABC",
    age: 12,
    address {
        city: "CITY1",
        state: "STATE",
    }
}

Могу ли я получить список всех уникальных значений City из списка? Например, с указанными выше 3 документами я хотел бы получить список {"CITY1", "CITY2"}

Я только начинал работать с MongoDB из реляционной базы данных, поэтому меня это немного сбивает с толку, так как для этого мне нужна была другая таблица адресов, и я могу просто использовать SELECT DISTINCT, чтобы получить то, что хочу.

0
Luke Vo 8 Мар 2014 в 09:40

2 ответа

Лучший ответ

Только для заметок: уже упоминалось отличное, но для более обычного ответа используйте агрегат:

db.Student.aggregate([
    {"$unwind": "$address" }},
    {"$group": { "_id": "$address.city" }},
    {"$project": { "_id": 0, "city" : "$_id" }}
])

По сравнению с отчетливым, затяжной, но это зависит от того, чего хотят ваши глаза.

0
Neil Lunn 8 Мар 2014 в 06:34