繁体   English   中英

从集合中选择on子句,从集合b的JOIN中选择

Select from collection a on clause from JOIN on collection b

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有两个收藏: gamesquestions
game架构:

{ 
  _id: ObjectId, 
  status: 'played',
  questions: 
     [ 
       { questionId: ObjectId(questions._id) } // ref to questions collection by _id field
     ] 
 }

questions模式:

{
  _id: ObjectId(),
  text: foobar
}

游戏可能具有两种状态:“活动”和“已玩”。
我的目标是获得与状态为“玩过”的游戏相关的所有“玩过的”问题,方式,问题。

我试图对games集合进行查询,试图对questions进行查询,但没有一个起作用。

他们之中有一些是:

db.games.aggregate([
     {$match: {status: {$ne: 'played'}}}, 
     {
         $lookup: 
           {
            from: 'questions', 
            localField: 'questions.questionId', 
            foreignField: '_id', 
            as: 'game_questions'
         }
      }, 
    {$project: {game_questions: 1}}, 
    {$unwind: {path: '$game_questions', preserveNullAndEmptyArrays: false}}
   ])

要么

db.questions.aggregate([
     { $project: {text: 1}}, 
     { $lookup: {
        from: 'games', 
        pipeline: [
           { $match: {status:'played' }}, 
           { $project: { status: 1 }}
        ], 
        as: 'game_data' 
      }}
])

底线 :提出请求后,我想获得一个包含问题的列表,其中游戏状态为“玩过”。

1 个回复

您可以将$unwind$replaceRoot$lookup阶段中找到的数据$replaceRoot使用

db.games.aggregate([
  { "$match": { "status": "played" }},
  { "$lookup": {
    "from": "questions",
    "let": { "questions": "$questions.questionId" },
    "pipeline": [
      { "$match": { "$expr": { "$in": ["$_id", "$$questions"] }}}
    ],
    "as": "game_data"
  }},
  { "$unwind": "$game_data" },
  { "$replaceRoot": { "newRoot": "$game_data" }}
])

要么

db.games.aggregate([
  { "$match": { "status": "played" }}, 
  { "$lookup": {    
    "from": "questions", 
    "localField": "questions.questionId", 
    "foreignField": "_id", 
    "as": "game_data"
  }}, 
  { "$unwind": "$game_data" },
  { "$replaceRoot": { "newRoot": "$game_data" }}
])
1 Laravel-使用“ join”子句从表中获取集合

LaraCSV使用Laravel集合轻松地从Eloquent模型导出csv文件。 我从中提取CSV的表中有3个来自另一个表的FK。 字段是['Operator','Supervisor','Escort'],它们与另一个表中的PERS_ID相关。 我需要创建一个Collection,该 ...

2 使用集合B中的过滤项查询集合A

给定以下2个合集歌曲和play_log 我需要一个具有查找功能的mongo聚合查询来执行魔术操作,以获取属于Bowie的“ Scary Monsters”专辑的所有歌曲的播放日志以及与歌曲相关的信息。 收集歌曲 集合play_log 预期结果 ...

3 用于从集合A构建集合B的惯用Scala

我有一个集合A,我需要从集合A创建集合B.在最简单的情况下,人们可能希望使用map方法,但我正在寻找一个解决方案,在创建B元素的每一步,需要访问集合中已有的元素。 我想到了创建B的多种可能性: 使用B的可变集合然后将其转换为不可变的集合 使用集合B底层的构建器 使 ...

2013-09-09 09:52:32 2 112   scala
5 如何从集合中选择?

例如,我运行以下查询: 我的问题是我只能得到代表类列表的一行。 我怎样才能让它为每个班级返回一行? ...

6 从分组集合中选择

我有一个表( HallPlan )字段: 并按Y分组收集: 现在我想从每个组的所有最小X中选择最大X. 例如, ordered包含三个组,我们有: 从每个groupes选择所有分钟: 15, 16, 15 并从上面选择最大值: 16 。 如何使用LINQ执行此 ...

2012-07-09 09:48:47 2 73   c#/ linq
9 从集合中选择计数

有没有一种方法可以在特定条件下捕获收集表中的计数。 例如 : 上面的查询抛出错误说: 任何见解将不胜感激。 谢谢 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM