MongoDB:升级阵列而不展开

时间:2018-10-10 14:29:54

标签: mongodb nosql aggregation-framework

我必须在MongoDB中汇总一个集合。

问题是:将一个数组上移到一个级别,然后对其进行某种放松。

我有这样的收藏:

{
	"name": "some_name", 
	"pair": [
		{
			"product": "prod1",
			"brands": [
				"coca-cola",
				"pepsi",
				"adidas"
			]
		}
		,
		{
			"product": "prod2",
			"brands": [
				"nike",
				"reebok",
			]
		}		
	]
}

聚合之后,我想看到以下信息:

{
	"name": "some_name", 
	"pair": [
		{
			"product": "prod1",
			"brands": "coca-cola",
		}
		,
		{
			"product": "prod1",
			"brands": "pepsi",
		}
		,
		{
			"product": "prod1",
			"brands": "adidas",
		}
		,
		{
			"product": "prod2",
			"brands": "nike",
		}
		,
		{
			"product": "prod2",
			"brands": "reebok",
		}
	]
}

即我们将获得数组对:其中元素包含带有产品和品牌的文档。

谢谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您也可以尝试下面的汇总

db.collection.aggregate([
  { "$addFields": {
    "pair": {
      "$reduce": {
        "input": {
          "$map": {
            "input": "$pair",
            "as": "sd",
            "in": {
              "$map": {
                "input": "$$sd.brands",
                "in": { "product": "$$sd.product", "brands": "$$this" }
              }
            }
          }
        },
        "initialValue": [],
        "in": { "$concatArrays": ["$$value", "$$this"] }
      }
    }
  }}
])