2012-07-10 55 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