Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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
在MongoDB聚合中连接两个阵列?_Mongodb - Fatal编程技术网

在MongoDB聚合中连接两个阵列?

在MongoDB聚合中连接两个阵列?,mongodb,Mongodb,聚合产生了两个数组:$array1和$array2: $array1 = [{ key1_1: 0, key1_2: 1, key1_3: 2 }, { key1_1: 0, key1_2: 1, key1_3: 2 }] $array2 = [{ k

聚合产生了两个数组:
$array1
$array2

    $array1 = [{ key1_1: 0,
                 key1_2: 1,
                 key1_3: 2 
               },
               { key1_1: 0,
                 key1_2: 1,
                 key1_3: 2 
               }]

    $array2 = [{ key2_1: 0,
                 key2_2: 1 
               }, 
               { key2_1: 0,
                 key2_2: 1 
               }]
我想完全加入他们

如果我这样做:

{ $project: { 'output': { $concatArrays: [ '$array1', '$array2' ] } }
结果将是:

output: [{  key1_1: 0,
            key1_2: 1,
            key1_3: 2
          },
          { key2_1: 0,
            key2_2: 1 
          },
          { key1_1: 0,
            key1_2: 1,
            key1_3: 2
          },
          { key2_1: 0,
            key2_2: 1
          }]
鉴于我更愿意:

output: [{  key1_1: 0, 
            key1_2: 1,
            key1_3: 2,
            key2_1: 0,
            key2_2: 1
          },
          { key1_1: 0,
            key1_2: 1,
            key1_3: 2,
            key2_1: 0,
            key2_2: 1
          }]

我想这只有通过
$project
才能实现,但如何才能使聚合变得更容易呢

> var a =[];
> var array1 = [{ key1_1: 0,                  key1_2: 1,                  key1_3: 2                 },                { key1_1: 0,                  key1_2: 1,                  key1_3: 2                 }];
> var array2 = [{ key2_1: 0,                  key2_2: 1                 },                 { key2_1: 0,                  key2_2: 1                 }];
> array1.forEach(function(o,i){a.push(Object.assign(array1[i],array2[i]));});
> printjson(a);
[
        {
                "key1_1" : 0,
                "key1_2" : 1,
                "key1_3" : 2,
                "key2_1" : 0,
                "key2_2" : 1
        },
        {
                "key1_1" : 0,
                "key1_2" : 1,
                "key1_3" : 2,
                "key2_1" : 0,
                "key2_2" : 1
        }
]

这里有一个解决方案,这并不完全是我想要的,但它已经足够好了

在聚合中,首先

{ $unwind: '$array1' },
{ $unwind: '$array2' },
然后进行分组:

{ $group: { _id: '$_id',
           arrays: { $push: { 
                              array1: '$array1',
                              array2: '$array2' 
                            }
                   }
           }
 },
结果将是:

"arrays": {[
             "array1": {
               ...
             },
             "array2": {
               ...
             }
           ]}

加入阵列没有问题。但是你正在尝试连接对象-将所有对象的字段复制到一个对象中有没有简单的方法?我注意到正在使用的键是重复的。请指定一份合适的样品文件好吗?如果您能提供诸如数组对象中的字段数、数组中的对象数等详细信息,这将是非常有用的。是的,它是,但它不是MongoDB解决方案。但显然没有比这更好的了,所以我会解决的。