2013-04-22 87 views
0

在MongoDB中,我有一個集合(「用戶」)與以下基本模式:MongoDB中:查詢由陣列的尺寸與濾波值

{ 
    "_id" : ObjectId("50e5de00b623143995c5b739") 
    "name" : "Jon", 
    "emails_sent" : [ 
     { 
      "type" : "invite", 
      "sent_time" : ISODate("2013-04-21T21:11:50.999Z") 
     }, 
     { 
      "type" : "invite", 
      "sent_time" : ISODate("2013-04-15T21:10:35.999Z") 
     }, 
     { 
      "type" : "follow", 
      "sent_time" : ISODate("2013-04-21T21:11:50.999Z") 
     } 
    ] 
} 

我想查詢基於所述用戶$ 的電郵大小,僅限於某個「類型」的電子郵件,例如,例如只計算「邀請」電子郵件。有什麼辦法可以在標準mongo查詢中實現這種「過濾計數」?

非常感謝。

回答

0
db.users.aggregate([ 
{$unwind:'$emails_sent'}, 
{$match: {'$emails_sent.type':'invite'}}, 
{$group : {_id : '$name', sumOfEmailsSent:{$sum:1} }} 
]); 

順便說一句,你缺少一個方括號,它關閉$ emails_sent數組。

+1

並且當然會有另一個$匹配作爲最後一步,只會返回具有所需數量的此類電子郵件的用戶,對吧? – 2013-04-22 19:00:15

+0

當然可以。也許程序員希望看到具有特定email_sent計數的個人用戶或用戶列表。這是留給程序員的選擇。 – 2013-04-22 21:41:05