首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有数组的mongo聚合$lookup

带有数组的mongo聚合$lookup
EN

Stack Overflow用户
提问于 2020-07-21 14:04:55
回答 1查看 35关注 0票数 1

我有这样的结构

代码语言:javascript
复制
unions {              // collection
  members {           // array
    instanceId        // some id
    ...
  }
  ...
}

在文档中,我有id支柱(数组),我需要查找至少有一个id的所有联合(基本上是$in)。

问题是它不起作用

首先,我想试试这个变体。

代码语言:javascript
复制
{
  from: 'unions',
  let: { instanceIds: '$ids'  },
  as: 'unions',
  pipeline: [
    {
      $match: { 'members.instanceId': { $in: '$$instanceIds' } },
    },
  ],
}

但是我们不能在这里使用聚合变量。为此,我们需要使用$expr

代码语言:javascript
复制
{
  from: 'unions',
  let: { instanceIds: '$ids'  },
  as: 'unions',
  pipeline: [
    {
      $match: {
        $expr: {
          $in: ['$members.instanceId', '$$instanceIds']
        }
      },
    },
  ],
}

但是它会返回0份文档。instanceIds数组不是空的,我已经检查过了。另外,如果我在示例中粘贴一个没有$expr的值的数组,那么它将返回正确的值。所以最有可能的问题是我是如何构建这个$lookup的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-21 14:50:17

使用{ $ne:[{ $setIntersection:‘$embers.instanceId’,'$$instanceIds‘},[]] }}

代码语言:javascript
复制
{
  from: 'unions',
  let: { instanceIds: '$ids'  },
  as: 'unions',
  pipeline: [
    {
      $match: {
        $expr: {
          cond: { $ne: [{ $setIntersection: ['$members.instanceId', '$$instanceIds'] }, []] },
        },
      },
    },
  ],
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63016316

复制
相关文章

相似问题

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