Voici à quoi ressemblent les documents dans db.MongoDB - Comment faire une requête pour obtenir l'utilisation moyenne?
/* 1 */
{
"_id" : 1,
"feat" : {
"processName": [
{
"value" : {
"value": "Process1"
}
}
],
"processUsage": [
{
"value" : {
"value": 23.21
}
}
]
}
}
/* 2 */
{
"_id" : 2,
"feat" : {
"processName": [
{
"value" : {
"value": "Process2"
}
}
],
"memoryUsage": [
{
"value" : {
"value": 2.411502e+05
}
}
]
}
}
/* 3 */
{
"_id" : 3,
"feat" : {
"processName": [
{
"value" : {
"value": "Process1"
}
}
],
"processUsage": [
{
"value" : {
"value": 67.42
}
}
]
}
}
/* 4 */
{
"_id" : 4,
"feat" : {
"processName": [
{
"value" : {
"value": "Process3"
}
}
],
"processUsage": [
{
"value" : {
"value": 39.97
}
}
]
}
}
/* 5 */
{
"_id" : 5,
"feat" : {
"processName": [
{
"value" : {
"value": "Process2"
}
}
],
"processUsage": [
{
"value" : {
"value": 21.05
}
}
]
}
}
Chaque processus a des entrées avec processUsage et memoryUsage. Ce qui m'intéresse, c'est l'utilisation moyenne du processus. Donc, je voudrais ignorer les entrées avec memoryUsage.
J'ai essayé $ match + $ groupe dans un agrégat avec $ moy, mais pour chaque processus, je viens de revenir en moyenne 0,00000000. Ensuite, j'ai tenté ma chance avec mapReduce en utilisant javascript, malheureusement cela n'a pas fonctionné non plus.
Quelqu'un pourrait-il me montrer comment faire? Soit dit en passant, je me sers Robomongo 0.8.5
Edit:
La requête ressemble à ceci:
db.database.aggregate([
{ $match : {"$feat.processUsage.value.value": {$gt : -1}
},
{
$group: {_id: "$feats.processName.value.value", average: {$avg:
"$feats.processUsage.value.value"}
}
])
Pouvez-vous montrer la requête que vous avez essayé? – toddmo
@toddmo: J'ai ajouté la requête. – tumbler
Vous vous regroupez sur la mauvaise base. Vous aurez besoin d'un identifiant qui distinguera la mémoire du processus. Puis groupe par là. –