【问题标题】:MONGO get only the name of documents but not the whole documentsMONGO 只得到文件的名称而不是整个文件
【发布时间】:2019-02-12 04:40:49
【问题描述】:

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

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

注意;我也使用了公司名称的索引以及独特的条件。 soo --> 我认为它应该可以帮助我快速找到公司名称 很容易,但我不知道如何

这是合集

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() 的整个公司集合。 --> 然后通过遍历找到他们每个人的名字

我该怎么做:需要快速,数据量很大

【问题讨论】:

    标签: node.js mongodb collections


    【解决方案1】:

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

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

    返回:

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

    或者您可以使用聚合框架来获取具有名称数组的单个文档:

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

    返回:

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

    如果您在company_name 上有索引,第一个应该是最快的方法。在这种情况下,您的查询不需要扫描集合,并且可以仅使用索引来获取查询数据 (covered query)。

    【讨论】:

    • 哪个快
    • @user6202188 MongoDB 聚合管道在初始执行时自然会慢一些。但是,查找查询可能会更慢,因为它会批量抓取数据。即便如此,这些命令都不应该特别慢。您最关心的是您正在处理多少数据,因为大量文档可能会超出聚合管道的限制。您最好的选择可能是只使用带有投影的.find()。如果您确实发现自己遇到了性能问题,您可能需要更好的索引。
    • 查询投影以及适当的索引将允许查询仅使用索引来检索结果。这称为“覆盖查询”。见docs.mongodb.com/manual/core/query-optimization/#covered-query
    • 0 - 不显示该字段; 1 - 显示值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多