我有一个看起来像这样的文件
{'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,而不必为每个特定名称编写。
答案 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
}
})