Подзапрос в MongoDB - PullRequest
       6

Подзапрос в MongoDB

0 голосов
/ 06 июня 2018

Я новичок в mongoDB и хочу получить "COUNTS" из двух связанных коллекций в createView.

userID     contestCount        namesCount
1          25                  5
2          5                   87
...

Моя проблема

Кто-то может помочьмне.Tnx

Решено:

Tnx 'Lohmar ASHAR'.

это было очень полезно, но если у элемента 'контесты' нет имен ''дочерний элемент, этот запрос возвращает неправильный результат.Я изменил запрос на это:

db.users.aggregate([
{ $lookup: { from: "contests", localField: "_id", foreignField: "createdBy", as: "cs"  }},  
{ $lookup: { from: "names", localField: "_id", foreignField: "createdBy", as: "ns"  }  }, 
{ $project: { "cs._id": 0, "ns._id": 0  }  }, 
{ $project: { contestsCount: {$size:  "$cs"}, namesCount: {$size: "$ns"}  }  }  ])

1 Ответ

0 голосов
/ 06 июня 2018

Полагаю, вы могли бы выполнить двухэтапную агрегацию, на первом шаге накапливать имена и конкурсы в сеты, а на первом получите длину

db.names.aggregate(
{$group: {
    _id: "$createdBy"
    "c": {$addToSet: "$contestId"},
    "n": {$addToSet: "$_id"}
  }},
{$project: {
    _id: 1,
    c: {$size: "$c"},
    n: {$size: "$n"},
  }}
)

, предполагая, что создатель имени и создатель конкурса могут быть/ является одним и тем же, в противном случае это невозможно в текущем проекте, и вам придется выполнить 2 запроса и соединить данные «вручную».

...