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
,在本例中)并将元素累积到单个数组中—这就是您在结果中看到的结果。我认为这是预期的结果。有关更多详细信息,请参阅中的文档。