MONGO получают только название документов, но не все документы - PullRequest
0 голосов
/ 07 сентября 2018

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

Я новичок в монго, db.company.find () -> это даст весь документ, который ОЧЕНЬ БОЛЬШОЙ

ПРИМЕЧАНИЕ; Я использовал индексирование по названию компании, а также уникальное условие. Су -> Я думаю, это должно помочь мне быстро найти название компании и легко, НО я не знаю как

это коллекция

collection company :      --> list of companies in the collection    

 {

    {   
       "_id": "5b8ed214b460e7c17c5a33f9",
        "company_location": "USA",
        "company_name": "tesla",         -----> COMPANY NAME: TESLA
        "cars": 
            [
                 {---car 1---} ,
                 {---car 2---} ,
                 {---car n---} 
            ],
    },

    {   
       "_id": "5b8ed214b460e7c17c5a33f9",
        "company_location": "USA",
        "company_name": "gmc",         -----> COMPANY NAME :GMC
        "cars": 
            [
                 {---car 1---} ,
                 {---car 2---} ,
                 {---car n---} 
            ],
    },

    {   
       "_id": "5b8ed214b460e7c17c5a33f9",
        "company_location": "USA",
        "company_name": "bmw",         -----> COMPANY NAME:BMW
        "cars": 
            [
                 {---car 1---} ,
                 {---car 2---} ,
                 {---car n---} 
            ],
    },
    {   
       "_id": "5b8ed214b460e7c17c5a33f9",
        "company_location": "USA",
        "company_name": "audi",         -----> COMPANY NAME: AUDI
        "cars": 
            [
                 {---car 1---} ,
                 {---car 2---} ,
                 {---car n---} 
            ],
    },
}

Итак, Я просто хочу список названий компаний, а не всю коллекцию компаний, использующую db.companies.find(). -> а затем найти имена каждого из них, пройдя его

Как я могу это сделать: нужно быстро, данные огромны

1 Ответ

0 голосов
/ 07 сентября 2018

Вы можете использовать второй параметр метода .find(), чтобы указать проекцию :

db.companies.find({}, { _id: 0, company_name: 1 })

, который возвращает:

{ "company_name" : "gmc" }
{ "company_name" : "tesla" }
...

Или вы можете использовать Aggregation Framework для получения одного документа с массивом имен:

db.companies.aggregate([{ $group: { _id: null, company_names: { $push: "$company_name" } } }])

, который возвращает:

{ "_id" : null, "company_names" : [ "gmc", "tesla", ... ] }

Первый путь должен быть самым быстрым, если у вас есть индекс на company_name. В этом случае ваш запрос не должен сканировать коллекцию и может использовать только индекс для получения запрашиваемых данных ( покрытый запрос ).

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