MONGO仅获得文档名称,而不是整个文档

时间:2018-09-06 21:07:33

标签: node.js mongodb collections

查询mongo仅查找名称:以一种快速的方式, 即我不想获取每个文档,然后从每个文档中获取名称。

我是mongo的新手, db.company.find()->这将给出整个文件,非常大

注意;我已经使用索引到公司名称和独特的条件了。 o->我认为这应该可以帮助我快速找到公司名称, 容易但是我不知道

这是收藏集

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 :(得分:2)

您可以使用.find()方法的第二个参数来指定projection

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上有索引,第一个应该是最快的方法。在这种情况下,您的查询不需要扫描集合,而只能使用索引来获取查询的数据(covered query)。