Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database mongo聚合$lookup与数组_Database_Mongodb_Aggregation Framework_Nosql Aggregation - Fatal编程技术网

Database mongo聚合$lookup与数组

Database mongo聚合$lookup与数组,database,mongodb,aggregation-framework,nosql-aggregation,Database,Mongodb,Aggregation Framework,Nosql Aggregation,我有一个这样的结构 unions { // collection members { // array instanceId // some id ... } ... } 在文档中,我有ids prop(数组) 我需要从ids中查找至少有一个id的所有联合(基本上是$in) 问题是它不起作用 首先我想试试这个变体 { from: 'unions', let: { instanceIds: '$ids

我有一个这样的结构

unions {              // collection
  members {           // array
    instanceId        // some id
    ...
  }
  ...
}
在文档中,我有ids prop(数组) 我需要从ids中查找至少有一个id的所有联合(基本上是$in)

问题是它不起作用

首先我想试试这个变体

{
  from: 'unions',
  let: { instanceIds: '$ids'  },
  as: 'unions',
  pipeline: [
    {
      $match: { 'members.instanceId': { $in: '$$instanceIds' } },
    },
  ],
}
但是我们不能在这里使用聚合变量。为此,我们需要使用$expr

{
  from: 'unions',
  let: { instanceIds: '$ids'  },
  as: 'unions',
  pipeline: [
    {
      $match: {
        $expr: {
          $in: ['$members.instanceId', '$$instanceIds']
        }
      },
    },
  ],
}
但是它返回0个文档。InstanceId数组不是空的,我已经检查过了。
另外,如果我在示例中粘贴了一个不带$expr的值的数组,那么它将返回正确的值。所以最有可能的问题是我如何构建这个$lookup。

使用{$ne:[{$setcrossion:['$members.instanceId','$$instanceIds']},[]}

{
  from: 'unions',
  let: { instanceIds: '$ids'  },
  as: 'unions',
  pipeline: [
    {
      $match: {
        $expr: {
          cond: { $ne: [{ $setIntersection: ['$members.instanceId', '$$instanceIds'] }, []] },
        },
      },
    },
  ],
}

使用{$ne:[{$setIntersection:['$members.instanceId','$$instanceId']},[]}

{
  from: 'unions',
  let: { instanceIds: '$ids'  },
  as: 'unions',
  pipeline: [
    {
      $match: {
        $expr: {
          cond: { $ne: [{ $setIntersection: ['$members.instanceId', '$$instanceIds'] }, []] },
        },
      },
    },
  ],
}