Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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
Arrays MongoDB中的组合数组_Arrays_Mongodb_Mongodb Query_Array Merge - Fatal编程技术网

Arrays MongoDB中的组合数组

Arrays MongoDB中的组合数组,arrays,mongodb,mongodb-query,array-merge,Arrays,Mongodb,Mongodb Query,Array Merge,嗨,这是我的代码,只是不知道该怎么做 db.car3.aggregate([{$group:{_id:"$Manufacturer",Extras:{$push:"$Extras"}}}]) 我得到的结果是 {_ID:"Fiat","Extra:[[Aircon,parking,GPS],[GPS,Parking Sensor, Pass]]"}, {_ID:"Toyota","Extra:[[ABS,Power Windows,GPS],[GPS,Auto Wiper, Pass]]"}

嗨,这是我的代码,只是不知道该怎么做

db.car3.aggregate([{$group:{_id:"$Manufacturer",Extras:{$push:"$Extras"}}}]) 
我得到的结果是

{_ID:"Fiat","Extra:[[Aircon,parking,GPS],[GPS,Parking Sensor, Pass]]"},
{_ID:"Toyota","Extra:[[ABS,Power Windows,GPS],[GPS,Auto Wiper, Pass]]"}
我不知道该如何将这些数组组合在一起,所以最后就是这样

{_ID:"Fiat","Extra:[[Aircon,parking,GPS,Parking Sensor, Pass]]"},    
{_ID:"Toyota","Extra:[ABS,Power Windows,GPS,Auto Wiper, Pass]"}

您可以使用
$reduce
操作符将数组中的每个元素合并为一个值(在本例中,多个数组合并为一个数组)

只需将此阶段添加到
$group
阶段之后的聚合中:

{ 
  $addFields: { 
      Extra: { 
          $reduce: { 
               input: "$Extra", 
               initialValue: [ ], 
               in: { $concatArrays : [ "$$value", "$$this" ]  } 
          }
      }
  }
}

似乎
$extra
已经是一个数组。因此,在
$group
之前,请使用
$unwind

另外,不要使用
$push
而使用
$addToSet
来保持字段在数组中的唯一性

更新后的查询如下所示:

db.car3.aggregate([
    {
        $unwind:"$Extras"
    },
    {
        $group:{
            _id:"$Manufacturer",
            Extras:{
                $addToSet:"$Extras"
            }
        }
    }
]).pretty()
因此,在此之后不需要进一步合并

输出将是:

{_ID:"Fiat","Extra:[[Aircon,parking,GPS,Parking Sensor, Pass]]"},    
{_ID:"Toyota","Extra:[ABS,Power Windows,GPS,Auto Wiper, Pass]"}

要获取数组还是嵌套数组?我怀疑结果来自上面的代码(
Extra
不匹配
Extra
,它无论如何都不是有效的BSON){$push:{:,…}
$$value
$$this
$reduce
构造中使用的特殊变量
$$value
是指正在累积(或减少)到单个数组中的值,该值在
初始值
处初始化
$$此
引用数组的当前元素。reduce函数遍历数组(
$Extra
,在本例中)并将元素累积到单个数组中—这就是您在结果中看到的结果。我认为这是预期的结果。有关更多详细信息,请参阅中的文档。