2017-02-07 99 views
0

在這裏需要幫助。

我有兩個集合,第一個集合不是很大,有很小的文檔。

第二個有更多的項目(數千,可能更多)與中等大小的文件。

第一個文檔中有一個屬性與第二個文檔中的屬性匹配。

這裏的關係是第一個集合中的項目在第二個集合中有許多其他項目正在引用它。

說例如我有第一個代表人的集合,第二個代表信用卡交易。一個人可能有很多交易。 PersonId是交易集合中人員集合和每個交易文檔的標識。

我想寫一個查詢來計算每個人有多少交易。

我看到它建議使用聚合和查找。 但是,當我嘗試,我收到一個消息,文檔大小超過限制。

我猜這是因爲它將一個人的所有交易彙總到一個文檔中......不確定,這是我第一次使用MongoDB進行體驗。

什麼是最好的方法來實現這一目標?聚合方法是正確的選擇嗎?

Thanx! 吉利

回答

0

您可以使用簡單的分組來獲得交易的每個人

db.transactions.aggregate([ 
    { $group: {_id: "$personId", count: {$sum:1}}} 
]) 

輸出將包含個人ID,以及該人的交易次數內。您可以在內存中匹配人員和交易數據。您還可以使用查找來返回具有某些人員數據的交易數據。但請記住 - 您不會在沒有交易的情況下檢索條目:

db.transactions.aggregate([ 
    { $group: {_id: "$personId", count: {$sum:1}}}, 
    { $lookup: 
     { 
     from: "people", 
     localField: "_id", 
     foreignField: "_id", 
     as: "person" 
     } 
    }, 
    {$unwind: "$person"}, 
    {$project:{name:"$person.name", count:"$count"}} 
])