1

My document used to look like this:

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

For which, the following group command worked, in order to get the distinct DisciplineNames and DisciplineCodes from my documents

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: { } 
});

However, my document has now changed to:

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

As you can see, Discipline is an embedded doc.

グループコマンドを変更して同じことを行うにはどうすればよいですか?

4

1 に答える 1

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
        }
    ]
于 2012-07-10T22:12:08.750 に答える