MongoDB中的子查询

时间:2018-06-06 13:05:20

标签: sql mongodb aggregation

我是mongoDB的新手,我想得到" COUNTS"来自createView中的两个相关集合。

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

My Problem

有人可以帮助我。 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 :(得分:0)

我猜你可以做一个2步聚合,在第一步累积名称和竞赛成套,并在第一步得到长度

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

这假设名称的创建者和比赛的创建者可以是/是同一个,否则当前设计是不可能的,你将不得不做2个查询并“手动”加入数据。