【问题标题】:Using MongoDB Group on embedded documents在嵌入式文档上使用 MongoDB Group
【发布时间】:2012-07-11 06:21:43
【问题描述】:

我的文档以前是这样的:

{
  _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 是一个嵌入式文档。

如何修改我的组命令以仍然执行相同的操作?

【问题讨论】:

  • 你能确认你的reduce函数是正确的吗?如果 obj 没有 "disciplineName" 字段,请将上一个文档的名称字段设置为不存在的值?

标签: mongodb


【解决方案1】:

我相信您正在尝试返回一个文档,其中列出了学科代码和名称的所有不同组合。在您的第一个组命令中,我认为没有调用 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
        }
    ]

【讨论】:

  • 如果这不是您想要完成的,请告诉我。
  • 我们能不能也给个条件??
猜你喜欢
  • 1970-01-01
  • 2019-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多