首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为第二管道步骤的mongodb查找匹配-expr

作为第二管道步骤的mongodb查找匹配-expr
EN

Stack Overflow用户
提问于 2018-09-12 12:51:13
回答 1查看 4.9K关注 0票数 2

我对mongodb聚合比较陌生,我有一个小问题:

我想把两个集合连接起来。问题是,外域被放置在内部数组中。这意味着我必须展开数组才能生成一个正确的$match。在我的$match中,我使用了一个$epxr和一个$eq,以使连接在没有缠绕的文档上(这是为了解决这个问题)。需要$expr来访问原始集合中的变量:

代码语言:javascript
复制
[
  ...
  {
    $lookup: {
      from: 'foreignCollection',
      as: 'field',
      let: {
        localField: '$someComparisonField'
      },
      pipeline: [
        {
          $unwind: '$arr'
        },
        {
          $match: {
            $expr: {
              $eq: [ '$arr.foreignField', '$$localField' ]
            }
          }
        }
      ]
    }
  }
]

但是,在我的结果集中,field总是一个空数组。我真的不知道我做错了什么

有人能帮我吗?

编辑:根据请求的,两个集合的一些样本数据:

orginalCollection:

代码语言:javascript
复制
{
  ...
  someComparisonField: 1
},
{
  ...
  someComparisonField: 2
}

foreignCollection:

代码语言:javascript
复制
{
  ...
  arr: [
    {
      ...
      foreignField: 1
    },
    {
      ...
      foreignField: 1
    },
    {
      ...
      foreignField: 2
    },
  ]
},
{
  ...
  arr: [
    {
      ...
      foreignField: 1
    },
    {
      ...
      foreignField: 2
    },
    {
      ...
      foreignField: 2
    },
  ]
},
{
  ...
  arr: [
    {
      ...
      foreignField: 2
    },
    {
      ...
      foreignField: 1
    },
    {
      ...
      foreignField: 2
    },
  ]
},

编辑2:

我忘记添加一个小细节:由于$eq在内部管道中,我正在访问一个固定的索引,这意味着foreignField实际上看起来如下:foreignField: [ <value> ]

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-13 08:40:34

经调查,我得出以下结论:

在进一步阅读之前,我建议阅读我对这些问题的两个编辑。尤其是我的第二版。

似乎$eq在$expr中根本无法比较一个固定的索引。

这个表达式在某种程度上是行不通的:

代码语言:javascript
复制
{
  $expr: {
    $eq: [ '$arr.foreignField.0': '$$localField' ]
  }
}

为了解决这个问题,我在这个阶段之前创建了一个投影,它从所需的固定索引中提取值并将其存储在一个新的字段中。因此,内部管道的特定阶段如下所示:

代码语言:javascript
复制
...
{
  $project: {
    value: { $arrayElemAt: [ '$arr.foreignField', 0 ] }
  }
},
{ 
  $match: {
    $expr: {
      $eq: [ '$value', '$$localField' ]
    }
  }
}
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52295674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档