【问题标题】:MongoDB: How to get the object names in collection?MongoDB:如何获取集合中的对象名称?
【发布时间】:2020-02-28 11:25:50
【问题描述】:

并提前考虑您的帮助。我最近开始将 mongoDB 用于一些个人项目,我有兴趣找到一种更好的方法来查询我的数据。

我的问题是:我有以下收藏:

 {
    "_id" : ObjectId("5dbd77f7a204d21119cfc758"),
    "Toyota" : {
            "Founder" : "Kiichiro Toyoda",
            "Founded" : "28 August 1937",
            "Subsidiaries" : [
                    "Lexus",
                    "Daihatsu",
                    "Subaru",
                    "Hino"
            ]
    }
}

{
    "_id" : ObjectId("5dbd78d3a204d21119cfc759"),
    "Volkswagen" : {
            "Founder" : "German Labour Front",
            "Founded" : "28 May 1937",
            "Subsidiaries" : [
                    "Audi",
                    "Volkswagen",
                    "Skoda",
                    "SEAT"
            ]
    }
}

我想获取对象名称,例如这里我想返回 【丰田、大众】

我用过这个方法

变量名称 = {}
db.cars.find().forEach(function(doc){Object.keys(doc).forEach(function(key){names[key]=1})});
名字;

这给了我以下结果:

{ "_id" : 1, "丰田" : 1, "大众" : 1 }

但是,有没有更好的方法来获得相同的结果,并且只返回对象的名称。谢谢。

【问题讨论】:

标签: mongodb mongodb-query aggregation-framework


【解决方案1】:

我建议您将架构设计更改为:

{
  _id: ...,
  company: {
    name: 'Volkswagen',
    founder: ...,
    subsidiaries: ...,
    ...<other fields>...
}

然后您可以使用聚合框架来实现类似的结果:

> db.test.find()
{ "_id" : 0, "company" : { "name" : "Volkswagen", "founder" : "German Labour Front" } }
{ "_id" : 1, "company" : { "name" : "Toyota", "founder" : "Kiichiro Toyoda" } }

> db.test.aggregate([ {$group: {_id: null, companies: {$push: '$company.name'}}} ])
{ "_id" : null, "companies" : [ "Volkswagen", "Toyota" ] }

更多详情见:

作为奖励,您可以在 company.name 字段上创建索引,而您不能像在您的示例中那样在不同的字段名称上创建索引。

【讨论】:

    猜你喜欢
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2022-01-03
    • 2020-04-12
    • 1970-01-01
    相关资源
    最近更新 更多