1

在集合稱爲「MyCollection的」文檔看起來是這樣的:MongoDB的聚集和計數

{ 
    _id : 57b4b4e028108d801738a472, 
    updatedAt : 2016-08-17T19:03:01.831+0000, 
    createdAt : 2016-08-17T19:02:56.887+0000, 
    from : 57b1c2fc4bf55ba009b36c84, 
    to : 57b1c75e4bf55ba009b36c85, 
} 

我需要計數「從」和「到」的發生,並與像這樣的文件的採集端了起來:

{ 
    "_id" : 7b1c2fc4bf55ba009b36c84, 
    "occurredInFrom" : 12, 
    "occurredInTo" : 16 
} 

其中_id來自'$ from'或'$ to'。

我已經寫了不正確的彙總查詢是這樣的:

{ 
    $group: { 
    _id: "$from", 
     occurredInFrom: { $sum: 1 }, 
     occurredInTo: { $sum: 1} 
    } 
} 

我可以肯定看到_id:「從$」是不夠的。你能告訴我正確的方法嗎?

注意:'myCollection'的結構不是最終的,如果您認爲結構更好,請給出建議。

+2

相關[MongoDB的彙總查詢,或者太複雜?(https://stackoverflow.com/questions/35161734/mongodb-aggregate-query-or-too-complex)和[Mongo Group和兩個字段總和](https://stackoverflow.com/questions/35549200/mongo-group-and-sum-with-two-fields/35550524#35550524) – styvane

回答

1

試試這個

db.myCollection.aggregate([ 
    { $project: 
    { _id: 0, 
     dir: [ 
     {id:"$from", from:{"$sum":1}, to:{"$sum":0}}, 
     {id:"$to", from:{"$sum":0}, to:{"$sum":1}} 
     ] 
    } 
    }, 
    { $unwind : "$dir" }, 
    { $group: 
    { 
     _id: "$dir.id", 
     occurredInFrom: { $sum: "$dir.from" }, 
     occurredInTo: { $sum: "$dir.to" } 
    } 
    } 
]) 
+0

異常:不允許的字段類型對象表達式中的數組(at'dir'), code:15992 – Granga

+0

是的,我已修復,它適用於我的db –

+0

它可能是我的數據庫版本,3.0 mongolab沙箱。我將嘗試找到一種方法使它在這個較舊的版本中工作。謝謝。 – Granga