MongoDB: выровнять массив без размотки - PullRequest
0 голосов
/ 10 октября 2018

Я должен собрать одну коллекцию в 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 голосов
/ 10 октября 2018

Вы также можете попробовать агрегацию ниже

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"] }
      }
    }
  }}
])
...