2012-07-10 57 views
1

我的文檔用於這個樣子的:嵌入文檔中使用的MongoDB集團

{ 
    _id : 47cc67093475061e3d95369d, 
    Name : "A name", 
    Description : "Some description", 
    DisciplineCode : "105", 
    DisciplineName : "A Name", 
    OtherProperty : "Something" 
} 

對於這,下面的一組命令工作,爲了從我的文檔獲取不同DisciplineNames和DisciplineCodes

disciplines = db.result.group({ 
    key: {DisciplineName:1, DisciplineCode:1}, 
    reduce: function(obj, prev) { if (!obj.hasOwnProperty("DisciplineName")) { 
     prev.DisciplineName = obj.DisciplineName; 
     prev.DisciplineCode = obj.DisciplineCode; 
    }}, 
    initial: { } 
}); 

然而,在我的文檔現在已經改爲:

{ 
    _id : 47cc67093475061e3d95369d, 
    Name : "A name", 
    Description : "Some description", 
    Discipline: { 
    Code : "105", 
    Name : "A Name"}, 
    OtherProperty : "Something" 
} 

正如你所看到的,Discipline是一個嵌入式文檔。

我該如何修改我的組命令仍然執行相同的操作?

+2

燦你確認你的減少功能是正確的?如果obj沒有「disciplineName」字段,請將以前文檔的名稱字段設置爲不存在的值? – Jenna 2012-07-10 21:02:49

回答

3

我相信你正在嘗試返回一個文檔,列出了紀律代碼和名稱的所有不同組合。在你的第一組命令中,我不認爲調用reduce函數(如果我錯了,請糾正我)。

要現在得到規則的所有不同組合的代碼和名稱嵌入,你可以使用點符號:

db.example.group({ 
    key: {"discipline.name": 1, "discipline.code":1}, 
    initial: {}, 
    reduce: function(obj, prev){} 
}) 

輸入:

{ "_id" : 1, "doc" : { "name" : "Jenna", "number" : 1 } } 
{ "_id" : 2, "doc" : { "name" : "Jenna", "number" : 2 } } 
{ "_id" : 3, "doc" : { "name" : "Jenna", "number" : 2 } } 
{ "_id" : 4, "doc" : { "name" : "J", "number" : 2 } } 
{ "_id" : 5, "doc" : { "name" : "J", "number" : 1 } } 

結果:

[ 
     { 
      "doc.name" : "Jenna", 
      "doc.number" : 1 
     }, 
     { 
      "doc.name" : "Jenna", 
      "doc.number" : 2 
     }, 
     { 
      "doc.name" : "J", 
      "doc.number" : 2 
     }, 
     { 
      "doc.name" : "J", 
      "doc.number" : 1 
     } 
    ] 
+1

請讓我知道,如果這不是你想要完成的。 – Jenna 2012-07-10 22:22:56

+0

我們可以給這個條件嗎? – 2013-06-19 05:11:24