Как агрегировать, чтобы получить среднее с одинаковой строкой в ​​массиве полей - PullRequest
0 голосов
/ 28 марта 2019

У меня проблема здесь.Это мое поле в mongodb:

{"_id" : ObjectId("5c9c25b7ae9b9d188f088492"),
    "Title" : "PENERAPAN_DATA MINING PADA PENJUALAN MENGGUNAKAN METODE CLUSTERING STUDY KASUS PT",
    "Author" : "sutrisno",
    "Keywords" : [ 

        {
            "keywordName" : "mining",
            "keywordSkor" : 0.0119760479041916
        }, 
        {
            "keywordName" : "tampil",
            "keywordSkor" : 0.0119760479041916
        }, 
        {
            "keywordName" : "data",
            "keywordSkor" : 0.0114316820903647
        },  

    ],
    "Creator" : "sutrisno",
}

"_id" : ObjectId("5c9c28f8ae9b9d1e2ee4e158"),
    "Title" : "Jurnal Komputer dan Informatika (KOMPUTA)",
    "Author" : "Farid Fansuri",
    "Keywords" : [ 
        {
            "keywordName" : "data",
            "keywordSkor" : 0.0869158878504672
        }, 
        {
            "keywordName" : "mining",
            "keywordSkor" : 0.0308411214953271
        }, 

Как получить среднее значение поля Keywords с одинаковой строкой data и mining

"Keywords" : [
    {
        "keywordName" : "mining",
        "keywordSkor" : 0.0308411214953271
    }, 
    {
        "keywordName" : "data",
        "keywordSkor" : 0.0119760479041916
    }, 
     {
        "keywordName" : "tampil",
        "keywordSkor" : 0.0119760479041916
    },
]

1 Ответ

0 голосов
/ 28 марта 2019

Довольно просто достичь с помощью структуры агрегации:

db.collection.aggregate([
  {
    $unwind: "$Keywords"
  },
  {
    $group: {
      _id: "$Keywords.keywordName",
      avg: {
        $avg: "$Keywords.keywordSkor"
      }
    }
  }
])

выведет:

[
  {
    "_id": "tampil",
    "avg": 0.0119760479041916
  },
  {
    "_id": "data",
    "avg": 0.04917378497041595
  },
  {
    "_id": "mining",
    "avg": 0.02140858469975935
  }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...