MongoDb试图计算嵌入式文档内部

时间:2015-01-16 08:03:07

标签: mongodb count mongodb-query aggregation-framework

  

我有一个看起来像这样的文件

{'name':'abc',
'location': 'xyz',
 'social_links' : { 'facebook' : 'links',
                     'stackoverflow': 'links',
                     'quora' : 'links' ... }
}
  

我想计算我的收藏中每个social_links的链接总数   目前我的代码看起来像这样

    db.main_candidate.aggregate( [  { '$match': {'social_links.quora':     {'$exists': true}}},  {'$group': { '_id' :'quora', 'count': {'$sum':1 }}}])
  

虽然这正确地返回了特定social_link的计数,但我想编写一个查询,该查询将能够计算单个查询中的所有social_links,而不必为每个特定名称编写。

1 个答案:

答案 0 :(得分:3)

我认为没有办法在没有硬编码特定名称的情况下对查询进行分组。也许你应该试试MapReduce。

您应该将social_links存储为数组而不是文档,这对我来说更有意义。类似的东西:

{'name':'abc',
'location': 'xyz',
 'social_links' : [ { 'name':'facebook', 'link' : 'links'},
                    { 'name':'quora', 'link' : 'links'},
                    { 'name':'stackoverflow', 'link' : 'links'}]
}

然后您可以执行以下查询:

db.col.aggregate(
{
 $unwind: "$social_links"
},
{
 $group: 
 {
   _id: "$social_links.name",
   count: $sum: 1
  }
})