2016-07-22 140 views
1

分組我有收集數據是這樣的:MongoDB的數據與彙總

> db.LogBuff.find() 
{ "_id" : ObjectId("578899d5d2b76f77d083f16c"), "SUBJECT" : "DD", "SYS" : "A" } 
{ "_id" : ObjectId("578899d5d2b76f77d083f16d"), "SUBJECT" : "AA", "SYS" : "B" } 
{ "_id" : ObjectId("578899d5d2b76f77d083f16e"), "SUBJECT" : "BB", "SYS" : "A" } 
{ "_id" : ObjectId("578899d5d2b76f77d083f16f"), "SUBJECT" : "AA", "SYS" : "C" } 
{ "_id" : ObjectId("578899d5d2b76f77d083f170"), "SUBJECT" : "BB", "SYS" : "A" } 
{ "_id" : ObjectId("578899d5d2b76f77d083f171"), "SUBJECT" : "BB", "SYS" : "A" } 
{ "_id" : ObjectId("578899d5d2b76f77d083f172"), "SUBJECT" : "CC", "SYS" : "B" } 

而且我想,如下提取輸出(帶有明顯的「SYS」值)

{"SUBJECT" : "AA", "SYS" : ["A","B","C","D"]} 
{"SUBJECT" : "BB", "SYS" : ["A","B","C","D"]} 
{"SUBJECT" : "CC", "SYS" : ["A","B","C"]} 

這裏是我的代碼和我被困在中間,請幫我在_id這個

db.LogBuff.aggregate([{ 
    "$unwind": "$SYS" 
}, { 
    "$group": { 
      _id: { 
        "_id": "$SUBJECT" 
      }, 
      SYST: { 
        $addToSet: "$SYS" 
      } 
    } 
}, { 
    "$unwind": "$SYST" 
}, { 
    "$group": { 
      _id: { 
      "SUBJECT": "$_id", 
        "SYST":"$SYST" 
      } 
    } 
}]) 
+2

是什麼在第一管道使用了'$ unwind'操作的時候'SYS'領域是不是一個數組?爲什麼不直接運行'db.LogBuff.aggregate([ {$ group「:{ 」_id「:」$ SUBJECT「, 」sys「:{」$ addToSet「:」$ SYS「}} } } ])? – chridam

回答

3

剛組排序,addToSet個的SYS值:

db.LogBuff.aggregate([ 
    { 
    "$group": { 
      _id: { 
        "_id": "$SUBJECT" 
      }, 
      SYST: { 
        $addToSet: "$SYS" 
      } 
     } 
    } 
]) 

無需開卷,一個group應該得到你想要的結果。

您例如數據組聚集結果:

{ "_id" : { "_id" : "CC" }, "SYST" : [ "B" ] } 
{ "_id" : { "_id" : "BB" }, "SYST" : [ "A" ] } 
{ "_id" : { "_id" : "AA" }, "SYST" : [ "C", "B" ] } 
{ "_id" : { "_id" : "DD" }, "SYST" : [ "A" ] } 
+0

非常感謝 – Kavinda