2013-01-18 80 views
1

这里是我的文档结构:的MongoDB聚合管道多各期合并管道

{ 
"_id" : ObjectId("50dcd7ff4de274a2c4a31df0"), 
"seq_name" : "169:D18M6ACXX:1:1111:17898:82486:GTGACA_10", 
"raw_seq" : "TTGACCTGAGGAGACGGTGACCAGGGTTCCCTGGCCCCAGTAGTCAACGGGAGTTAGACTTCTCGCACAGTAATAAACAGCCGTGTCCTCGGCTCTCAGGCTGTTCATTTGCAGA", 
"seq_aa" : "LQMNSLRAEDTAVYYCARSLTPVDYWGQGTLVTVSSGQ", 
"cdr3_seq" : "GCGAGAAGTCTAACTCCCGTTGACTAC", 
"cdr3_seq_aa" : "ARSLTPVDY", 
"cdr3_seq_len" : 27, 
"cdr3_seq_aa_len" : 9, 
"vg" : "IGHV3-48*03", 
"dg" : "IGHD3-10*02R", 
"jg" : "IGHJ4*02", 
"donor" : 10 
} 

我真的很喜欢MongoDB的框架,但我有这个分组管道麻烦,因为我不能$到另一个集合尚未。我可以做这个多分组管道。

db.collection.aggregate({$match:{cdr3_seq_aa_len:{$gt:3}}, 
    {$group:{_id:$cdr3_seq_aa,other_set:{$addToSet:$cdr3_seq_aa_len}}}, 
    {$group:{_id:$other_set,sum:{$sum:1}}}) 

这给了我多少独特 $ cdr3_seq_aa的存在是由长度分组。

{ id:40, sum:1002031, 
    id:41, sum:1949402,.... 

但是我想要做的第一个操作是按捐助者分组。所以我可以首先知道每个捐助者中有多少独特的cdr3_seq_aa字符串。然后,我想按长度对它进行分组并计算有多少个字符串与长度组合。

回答

4

如果我理解正确的问题,这就是你要找的。关键概念是您可以从多个领域构建复合_id。

db.collection.aggregate(
[ 
    {$match: {cdr3_seq_aa_len: {$gt: 3}}}, 
    {$group: 
     { 
       _id: {donor: "$donor", cdr3_seq_aa: "$cdr3_seq_aa"}, 
       donor_cdr3_seq_aa_count: {$sum: 1}, 
       cdr3_seq_aa_len: {$first: "$cdr3_seq_aa_len"} 
     } 
    }, 
    {$group: 
     { 
      _id: {donor: "$_id.donor", len: "$cdr3_seq_aa_len"}, 
      num_strings_with_this_length: {$sum: 1}, 
      total_doc_count_by_length: 
        {$sum: "$donor_cdr3_seq_aa_count"} 
     } 
    } 
]) 
+0

的一些问题: 1.在第一组$ {cdr3_seq_aa_len $匹配 2.需要集团化运作的到底需要另一}($第一部作品) 3.需要$ cdr3_seq_aa_len去年$组_id,而不是$ cdr_seq_aa_len –

+0

@Wes。非常感谢更正。 – mjhm

+0

没问题。你击败了我的答案,所以我只是通过测试数据运行查询,这使得调试变得容易。 :) –

相关问题