Я новичок в стеке MERN, я пытался написать этот запрос, но не могу и много ищу в Google без какого-либо решения

Я должен поставить один для сообщений, а второй для категорий

Таблица 1 сообщений

--------------------------
|id   | title  |  category |
--------------------------
| 1   | title1 |    1      |
| 2   | title2 |    2      |
| 3   | title3 |    1      |
| 4   | title4 |    1      |

================= таблица 2 категорий

---------------
|id   | name   |
---------------
| 1   |  cat1  |
| 2   |  cat2  |

==================== результаты, которые я хочу, это

---------------------------------
|id   | name   | number of posts |
---------------------------------
| 1   |  cat1  |        3        |
| 2   |  cat2  |        1        |

Если это может помочь, я напишу этот запрос в mysql

SELECT categories.*,COUNT(posts.id) AS np FROM `categories` JOIN materials ON (categories.id = posts.category) GROUP BY categories.id

И спасибо

4
lhbib hbart 22 Сен 2018 в 05:02

1 ответ

Лучший ответ

Вы можете попробовать агрегирование ниже в mongodb 3.6 и выше

db.collection.aggregate([
  { "$lookup": {
    "from": "posts",
    "let": { "id", "$id" },
    "pipeline": [
      { "$match": { "$expr": { "$eq": ["$category", "$$id"] }}},
      { "$count": "count" }
    ],
    "as": "count"
  }},
  { "$project": {
    "name": 1,
    "numberOfPosts": { "$arrayElemAt": ["$count.count", 0] }
  }}
])
2
Ashh 22 Сен 2018 в 03:01