пн goose как рассчитать процент поля - PullRequest
1 голос
/ 03 февраля 2020

Проблема нелегко описать, вот простые ожидания

{
  "a": "any value",
  "b": "any value",
  "c": "any value",
  "d": "any value",
  "e": "any value",
  "percent": 1
},
{
  "a": "any value",
  "b": "any value",
  "c": "any value",
  "d": "any value",
  "e": "", // "", null, []
  "percent": 0.8
},
{
  "a": "any value",
  "b": "any value",
  "c": "any value",
  "d": "", // "", null, []
  "e": "", // "", null, []
  "percent": 0.6
}

Так же, как и результат, приведенный выше, percent получен из допустимых полей документа.

Можно запустить онлайн здесь https://mongoplayground.net/p/-4ErArICrgK

Как мне этого добиться, большое спасибо за вашу помощь!

1 Ответ

1 голос
/ 03 февраля 2020

Вы можете использовать ниже агрегации

db.coll.aggregate([
  { "$addFields": {
    "percent": {
      "$divide": [
        { "$size": {
          "$filter": {
            "input": { "$objectToArray": "$$ROOT" },
            "cond": {
              "$not": [
                {
                  "$in": [
                    "$$this.v",
                    [ "", null, [] ]
                  ]
                }
              ]
            }
          }
        }},
        {
          "$size": {
            "$objectToArray": "$$ROOT"
          }
        }
      ]
    }
  }}
])

MongoPlayground

...