Mongo Aggregate - подсчитайте, сколько раз в результатах запроса появляется несколько значений - PullRequest
1 голос
/ 05 мая 2019

Я пытаюсь посчитать, сколько раз два отдельных поля верны. У меня есть два значения "clickedWouldRecommend" и "clickedWouldNotRecommend". Эти значения по умолчанию тоже ЛОЖЬ. При нажатии кнопки в интерфейсе они устанавливаются слишком ИСТИНА. Я пытаюсь увидеть, сколько clickedWouldRecommend = true и сколько clickedWouldNotRecommend = true для каждого имени филиала.

db.appointments.aggregate([
{
  $match: {
    $and: [
      {
        'branch.org_id': '100000'
      },
      { "analytics.clickedWouldRecommend": true },
      // Add OR statement to include analytics.clickedWouldNotRecommend = true?
    ]
  }
},
{
  $group: {
    _id: '$branch.name',
    wouldRecommend: { $sum: 1 }
  }
}
])

Это дает результаты, аналогичные:

 {
  "_id": [ 'Clinic Name' ],
   "wouldRecommend": 115.0
 }

Мне нужно изменить запрос, чтобы также искать случаи, когда analytics.clickedWouldNotRecommend имеет значение true. Я пытаюсь получить вывод, похожий на этот (также обратите внимание на удаление массива из _id, если это возможно):

 {
  "name": 'Clinic Name'
   "wouldRecommend": 115,
   "wouldNotRecommend": 10
 },
 {
  "name": 'Second Clinic Name'
   "wouldRecommend": 200,
   "wouldNotRecommend": 12
 }

Вот усеченная модель / схема:

      {
  branch: [
    {
      name: {
        type: String,
        required: true
      },
      clinic_id: {
        type: String,
        required: true
      },
      org_id: {
        type: String
      }
    }
  ],
  analytics: {
    clickedWouldRecommend: {
      type: Boolean,
      default: false
    },
    clickedWouldNotRecommend: {
      type: Boolean,
      default: false
    }
  },
  date: {
    type: Date,
    default: Date.now
  }
};

1 Ответ

1 голос
/ 05 мая 2019

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

db.appointments.aggregate([
  { "$match": { "branch.org_id": "100000" }},
  { "$unwind": "$branch" },
  { "$facet": {
    "wouldRecommend": [
      { "$match": { "analytics.clickedWouldRecommend": true }},
      { "$group": { "_id": "$branch.name" }}
    ],
    "wouldNotRecommend": [
      { "$match": { "analytics.clickedWouldNotRecommend": true }},
      { "$group": { "_id": "$branch.name" }}
    ]
  }}
])

или

db.appointments.aggregate([
  { "$match": { "branch.org_id": "100000" }},
  { "$unwind": "$branch" },
  { "$group": {
    "_id": "$branch.name",
    "wouldRecommend": {
      "$sum": {
        "$cond": [{ "$eq": ["$analytics.clickedWouldRecommend", true] }, 1, 0]
      }
    },
    "wouldNotRecommend": {
      "$sum": {
        "$cond": [{ "$eq": ["$analytics.clickedWouldRecommend", true]}, 1, 0]
      }
    }
  }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...