通过刚刚创建的mongodb变量获取数组的长度

时间:2016-09-07 01:56:31

标签: mongodb

我是mongodb的新手,我有一个类似于以下内容的数据集,我正在尝试编写一个聚合查询,该查询将确定与个人关联的唯一公司的数量。

架构:

{
    "_id" : ObjectId("52cdef7c4bab8bd675297d8b"),
    "name" : "AdventNet",
    "permalink" : "abc3",
    "crunchbase_url" : "http://www.crunchbase.com/company/adventnet",
    "homepage_url" : "http://adventnet.com",
    "blog_url" : "",
    "blog_feed_url" : "",
    "twitter_username" : "manageengine",
    "category_code" : "enterprise",
    "number_of_employees" : 600,
    "founded_year" : 1996,
    "deadpooled_year" : 2,
    "tag_list" : "",
    "alias_list" : "Zoho ManageEngine ",
    "email_address" : "pr@adventnet.com",
    "phone_number" : "925-924-9500",
    "description" : "Server Management Software",
    "created_at" : ISODate("2007-05-25T19:24:22Z"),
    "updated_at" : "Wed Oct 31 18:26:09 UTC 2012",
    "overview" : "<p>AdventNet is now <a href=\"/company/zoho-manageengine\" title=\"Zoho ManageEngine\" rel=\"nofollow\">Zoho ManageEngine</a>.</p>\n\n<p>Founded in 1996, AdventNet has served a diverse range of enterprise IT, networking and telecom customers.</p>\n\n<p>AdventNet supplies server and network management software.</p>",
    "image" : {
        "available_sizes" : [
            [
                [
                    150,
                    55
                ],
                "assets/images/resized/0001/9732/19732v1-max-150x150.png"
            ],
            [
                [
                    150,
                    55
                ],
                "assets/images/resized/0001/9732/19732v1-max-250x250.png"
            ],
            [
                [
                    150,
                    55
                ],
                "assets/images/resized/0001/9732/19732v1-max-450x450.png"
            ]
        ]
    },
    "products" : [ ],
    "relationships" : [
        {
            "is_past" : true,
            "title" : "CEO and Co-Founder",
            "person" : {
                "first_name" : "Sridhar",
                "last_name" : "Vembu",
                "permalink" : "sridhar-vembu"
            }
        },
        {
            "is_past" : true,
            "title" : "VP of Business Dev",
            "person" : {
                "first_name" : "Neil",
                "last_name" : "Butani",
                "permalink" : "neil-butani"
            }
        },
        {
            "is_past" : true,
            "title" : "Usabiliy Engineer",
            "person" : {
                "first_name" : "Bharath",
                "last_name" : "Balasubramanian",
                "permalink" : "bharath-balasibramanian"
            }
        },
        {
            "is_past" : true,
            "title" : "Director of Engineering",
            "person" : {
                "first_name" : "Rajendran",
                "last_name" : "Dandapani",
                "permalink" : "rajendran-dandapani"
            }
        },
        {
            "is_past" : true,
            "title" : "Market Analyst",
            "person" : {
                "first_name" : "Aravind",
                "last_name" : "Natarajan",
                "permalink" : "aravind-natarajan"
            }
        },
        {
            "is_past" : true,
            "title" : "Director of Product Management",
            "person" : {
                "first_name" : "Hyther",
                "last_name" : "Nizam",
                "permalink" : "hyther-nizam"
            }
        },
        {
            "is_past" : true,
            "title" : "Western Regional OEM Sales Manager",
            "person" : {
                "first_name" : "Ian",
                "last_name" : "Wenig",
                "permalink" : "ian-wenig"
            }
        }
    ],
    "competitions" : [ ],
    "providerships" : [
        {
            "title" : "DHFH",
            "is_past" : true,
            "provider" : {
                "name" : "A Small Orange",
                "permalink" : "a-small-orange"
            }
        }
    ],
    "total_money_raised" : "$0",
    "funding_rounds" : [ ],
    "investments" : [ ],
    "acquisition" : null,
    "acquisitions" : [ ],
    "offices" : [
        {
            "description" : "Headquarters",
            "address1" : "4900 Hopyard Rd.",
            "address2" : "Suite 310",
            "zip_code" : "94588",
            "city" : "Pleasanton",
            "state_code" : "CA",
            "country_code" : "USA",
            "latitude" : 37.692934,
            "longitude" : -121.904945
        }
    ],
    "milestones" : [ ],
    "video_embeds" : [ ],
    "screenshots" : [
        {
            "available_sizes" : [
                [
                    [
                        150,
                        94
                    ],
                    "assets/images/resized/0004/3400/43400v1-max-150x150.png"
                ],
                [
                    [
                        250,
                        156
                    ],
                    "assets/images/resized/0004/3400/43400v1-max-250x250.png"
                ],
                [
                    [
                        450,
                        282
                    ],
                    "assets/images/resized/0004/3400/43400v1-max-450x450.png"
                ]
            ],
            "attribution" : null
        }
    ],
    "external_links" : [ ],
    "partners" : [ ]

}

这是我试过的查询:

     db.companies.aggregate([{
  $match: {
    "relationships.person": {
      $ne: null
    }
  }
}, {
  $project: {
    relationships: 1,
    _id: 0
  }
}, {
  $unwind: "$relationships"
}, {
  $group: {
    _id: "$relationships.person",
    count: {
      $addToSet: "$relationships"
    }
  }
}])

我想我现在需要获得$relationships数组的长度?我该怎么做?

1 个答案:

答案 0 :(得分:1)

当你只想要阵列的大小时,你真的不需要放松...... 只需使用$size即可。 将您的聚合更改为:

db.companies.aggregate([{
  $match: {
    "relationships.person": {
      $ne: null
    }
  }
}, {
  $project: {
    relationships: 1,
    _id: 0,
    relationship_size : { $size : "$relationships"}
  }
}
}])

这应该会给你想要的结果

从评论我明白你想要在聚合中有更多的逻辑,从我的头脑中我会改变你的聚合:

db.companies.aggregate([{
  $match: {
    "relationships.person": {
      $ne: null
    }
  }
}, {
  $project: {
    relationships: 1,
    _id: 0
  }
}, {
  $unwind: "$relationships"
}, {
  $group: {
    _id: "$relationships.person.permalink",
    count : {$sum : 1}
  }
}])

我无法找到公司名称&#34;在您的关系数组中,所以我使用永久链接属性