【问题标题】:Subquery in MongoDBMongoDB中的子查询
【发布时间】:2018-11-16 04:27:16
【问题描述】:

我是 mongoDB 的新手,我想从 createView 中的两个相关集合中获取“COUNTS”。

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

My Problem

有人可以帮助我。 天呐

已解决:

Tnx 'Lohmar ASHAR'。

这很有帮助,但是如果 'contests' 项没有 'names' 子项,则此查询返回错误的结果。 我将查询更改为:

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"}  }  }  ])

【问题讨论】:

  • 显示您的 MongoDB 集合以及您实际需要做什么。要求“请为我翻译我的代码”是题外话,也没有直接翻译之类的东西。 MongoDB 不是 RDBMS。因此,如果您只是将表转储到集合中并期望它们都能正常工作,那么您就错了。
  • @NeilLunn 感谢。已更正。
  • 您可以获取相关文档的 JSON 内容并将其包含在此处,而不是发布屏幕截图。数据应该与人们复制相关,我们不能从图片中做到这一点。这也有助于展示自己编写代码的一些尝试。人们乐于“提供帮助”,但如果他们认为自己只是在免费完成您的工作,就会不那么高兴。

标签: sql mongodb aggregation


【解决方案1】:

我猜你可以做一个两步聚合,第一步将名字和比赛累积到集合中,第一步得到长度

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

这假设名称的创建者和比赛的创建者可以/是相同的,否则在当前设计中是不可能的,您必须进行 2 次查询并“手动”加入数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-04
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    相关资源
    最近更新 更多