Как агрегировать в MongoDB используя значение внутри массива? - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть список товаров в моей коллекции, например:

[
  {
    "name": "product1",
    "categories": [
      {
        "category": "Food",
        "subcategory": "Nuts"
      },
      {
        "category": "Candies",
        "subcategory": "Chocolate"
      }
    ]
  },
  {
    "name": "product2",
    "categories": [
      {
        "category": "Food",
        "subcategory": "Nuts"
      },
      {
        "category": "Candies",
        "subcategory": "Mint"
      }
    ]
  },
  {
    "name": "product3",
    "categories": [
      {
        "category": "Food",
        "subcategory": "Cakes"
      },
      {
        "category": "Pastries",
        "subcategory": "Chocolate"
      }
    ]
  }
]

Я хочу получить количество товаров, используя агрегат. Если я запускаю

db.collection.aggregate([{ $group: { _id: "$categories", count: { $sum: 1 }} }])

, я получаю это:

[
  {
    "_id": [{ "category": "Food", "subcategory": "Nuts" }, { "category": "Candies", "subcategory": "Chocolate" }],
    "count": 1
  },
  {
    "_id": [{ "category": "Food", "subcategory": "Nuts" }, { "category": "Candies", "subcategory": "Mint" }],
    "count": 1
  },
  {
    "_id": [{ "category": "Food", "subcategory": "Cakes" }, { "category": "Pastries", "subcategory": "Chocolate" }],
    "count": 1
  }
]

Но мне действительно нужно найти счетчик для каждой категории и подкатегории, например:

[
  { "_id": { "category": "Food", "subcategory": "Nuts" }, "count": 2 },
  { "_id": { "category": "Food", "subcategory": "Cakes" }, "count": 1 },
  { "_id": { "category": "Candies", "subcategory": "Chocolate" }, "count": 1 },
  { "_id": { "category": "Candies", "subcategory": "Mint" }, "count": 1 },
  { "_id": { "category": "Pastries", "subcategory": "Chocolate" }, "count": 1 }
]

Есть запрос для получения этого?

1 Ответ

0 голосов
/ 28 апреля 2020

Вы должны $unwind categories первый

db.collection.aggregate([
  {
    $unwind: "$categories"
  },
  {
    $group: { _id: "$categories", count: { $sum: 1 } }
  }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...